/
LFS-SYSD-BOOK-11.1-NOCHUNKS-pt_br.txt
21482 lines (16757 loc) · 853 KB
/
LFS-SYSD-BOOK-11.1-NOCHUNKS-pt_br.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Linux From Scratch
Versão 11.1-systemd
Publicado 1º de março de 2022
Criado por Gerard Beekmans
Editor-chefe: Bruce Dubbs
Editor: Douglas R. Reno
Editor: DJ Lucas
Copyright © 1999-2022 Gerard Beekmans
Direitos autorais © 1999-2022, Gerard Beekmans
Todos os direitos reservados.
Este livro é licenciado sob uma [1]Creative Commons License.
As instruções de computador tem permissão para serem extraídas a partir
do livro sob a [2]MIT License.
Linux® é uma marca comercial registrada do Linus Torvalds.
__________________________________________________________________
Índice
* Prefácio
+ [3]Introdução
+ [4]Audiência
+ [5]Arquiteturas Alvo do LFS
+ [6]Pré-requisitos
+ [7]LFS e Padrões
+ [8]Justificativa para os pacotes no Livro
+ [9]Tipografia
+ [10]Estrutura
+ [11]Errata e Avisos de Segurança
* I. Introdução
+ 1. Introdução
o [12]Como Construir um Sistema LFS
o [13]O que há de novo desde o último lançamento
o [14]Registro de Mudanças
o [15]Recursos
o [16]Ajuda
* II. Preparando para a Construção
+ 2. Preparando o Sistema Anfitrião
o [17]Introdução
o [18]Exigências do Sistema Anfitrião
o [19]Construindo LFS em Estágios
o [20]Criando uma Nova Partição
o [21]Criando um Sistema de Arquivos na Partição
o [22]Configurando a Variável $LFS
o [23]Montando a Nova Partição
+ 3. Pacotes e Patches
o [24]Introdução
o [25]Todos os Pacotes
o [26]Patches Necessários
+ 4. Preparações Finais
o [27]Introdução
o [28]Criando um layout limitado de diretório em sistema de
arquivos de LFS
o [29]Adicionando a(o) Usuária(o) LFS
o [30]Configurando o Ambiente
o [31]Sobre UPCs
o [32]Sobre as Suítes de Teste
* III. Construindo o Conjunto de Ferramentas Cruzadas de LFS e
Ferramentas Temporárias
+ Material Preliminar Importante
o [33]Introdução
o [34]Notas Técnicas do Conjunto de Ferramentas
o [35]Instruções Gerais de Compilação
+ 5. Compilando um Conjunto de Ferramentas Cruzado
o [36]Introdução
o [37]Binutils-2.38 - Passagem 1
o [38]GCC-11.2.0 - Passagem 1
o [39]Cabeçalhos da API do Linux-5.16.9
o [40]Glibc-2.35
o [41]Libstdc++ oriundo de GCC-11.2.0, Passagem 1
+ 6. Compilando Cruzadamente Ferramentas Temporárias
o [42]Introdução
o [43]M4-1.4.19
o [44]Ncurses-6.3
o [45]Bash-5.1.16
o [46]Coreutils-9.0
o [47]Diffutils-3.8
o [48]File-5.41
o [49]Findutils-4.9.0
o [50]Gawk-5.1.1
o [51]Grep-3.7
o [52]Gzip-1.11
o [53]Make-4.3
o [54]Patch-2.7.6
o [55]Sed-4.8
o [56]Tar-1.34
o [57]Xz-5.2.5
o [58]Binutils-2.38 - Passagem 2
o [59]GCC-11.2.0 - Passagem 2
+ 7. Entrando em Chroot e Construindo Ferramentas Temporárias
Adicionais
o [60]Introdução
o [61]Mudando Propriedade
o [62]Preparando Sistemas de Arquivos Virtuais de Kernel
o [63]Entrando no Ambiente Chroot
o [64]Criando Diretórios
o [65]Criando Arquivos Essenciais e Links Simbólicos
o [66]Libstdc++ oriundo de GCC-11.2.0, Passagem 2
o [67]Gettext-0.21
o [68]Bison-3.8.2
o [69]Perl-5.34.0
o [70]Python-3.10.2
o [71]Texinfo-6.8
o [72]Util-linux-2.37.4
o [73]Limpando e Salvando o Sistema Temporário
* IV. Construindo o Sistema LFS
+ 8. Instalando Aplicativos Básicos de Sistema
o [74]Introdução
o [75]Gerenciamento de Pacote
o [76]Man-pages-5.13
o [77]Iana-Etc-20220207
o [78]Glibc-2.35
o [79]Zlib-1.2.11
o [80]Bzip2-1.0.8
o [81]Xz-5.2.5
o [82]Zstd-1.5.2
o [83]File-5.41
o [84]Readline-8.1.2
o [85]M4-1.4.19
o [86]Bc-5.2.2
o [87]Flex-2.6.4
o [88]Tcl-8.6.12
o [89]Expect-5.45.4
o [90]DejaGNU-1.6.3
o [91]Binutils-2.38
o [92]GMP-6.2.1
o [93]MPFR-4.1.0
o [94]MPC-1.2.1
o [95]Attr-2.5.1
o [96]Acl-2.3.1
o [97]Libcap-2.63
o [98]Shadow-4.11.1
o [99]GCC-11.2.0
o [100]Pkg-config-0.29.2
o [101]Ncurses-6.3
o [102]Sed-4.8
o [103]Psmisc-23.4
o [104]Gettext-0.21
o [105]Bison-3.8.2
o [106]Grep-3.7
o [107]Bash-5.1.16
o [108]Libtool-2.4.6
o [109]GDBM-1.23
o [110]Gperf-3.1
o [111]Expat-2.4.6
o [112]Inetutils-2.2
o [113]Less-590
o [114]Perl-5.34.0
o [115]XML::Parser-2.46
o [116]Intltool-0.51.0
o [117]Autoconf-2.71
o [118]Automake-1.16.5
o [119]OpenSSL-3.0.1
o [120]Kmod-29
o [121]Libelf oriundo de Elfutils-0.186
o [122]Libffi-3.4.2
o [123]Python-3.10.2
o [124]Ninja-1.10.2
o [125]Meson-0.61.1
o [126]Coreutils-9.0
o [127]Check-0.15.2
o [128]Diffutils-3.8
o [129]Gawk-5.1.1
o [130]Findutils-4.9.0
o [131]Groff-1.22.4
o [132]GRUB-2.06
o [133]Gzip-1.11
o [134]IPRoute2-5.16.0
o [135]Kbd-2.4.0
o [136]Libpipeline-1.5.5
o [137]Make-4.3
o [138]Patch-2.7.6
o [139]Tar-1.34
o [140]Texinfo-6.8
o [141]Vim-8.2.4383
o [142]MarkupSafe-2.0.1
o [143]Jinja2-3.0.3
o [144]Systemd-250
o [145]D-Bus-1.12.20
o [146]Man-DB-2.10.1
o [147]Procps-ng-3.3.17
o [148]Util-linux-2.37.4
o [149]E2fsprogs-1.46.5
o [150]Acerca dos Símbolos de Depuração
o [151]Despojando
o [152]Limpando
+ 9. Configuração do Sistema
o [153]Introdução
o [154]Configuração de Rede Geral
o [155]Visão Geral do Manuseio de Dispositivos e Módulos
o [156]Gerenciando Dispositivos
o [157]Configurando o relógio do sistema
o [158]Configurando o Console do Linux
o [159]Configurando o Locale do Sistema
o [160]Criando o Arquivo /etc/inputrc
o [161]Criando o Arquivo /etc/shells
o [162]Uso e Configuração do Systemd
+ 10. Tornando o Sistema LFS Inicializável
o [163]Introdução
o [164]Criando o Arquivo /etc/fstab
o [165]Linux-5.16.9
o [166]Usando o GRUB para Configurar o Processo de
Inicialização
+ 11. O Fim
o [167]O Fim
o [168]Seja Contado
o [169]Reinicializando o Sistema
o [170]E agora?
* V. Anexos
+ [171]A. Siglas e Termos
+ [172]B. Reconhecimentos
+ [173]C. Dependências
+ [174]D. Licenças do LFS
o [175]Licença da Creative Commons
o [176]A Licença do MIT
o [177]A Licença de Documentação Livre GNU
* [178]Índice Remissivo
Prefácio
Introdução
Minha jornada para aprender e entender melhor Linux começou em meados
de 1998. Eu havia acabado de instalar minha primeira distribuição Linux
e rapidamente fiquei intrigado com todo o conceito e filosofia por trás
do Linux.
Há sempre várias maneiras de se completar uma tarefa. O mesmo pode ser
dito sobre distribuições Linux. Muitas surgiram ao longo dos anos.
Algumas ainda existem, outras se transformaram em outra distribuição, e
ainda há outras que ficaram relegadas às nossas memórias. Todas elas
executam as tarefas de maneira diferente para se adequar às
necessidades de seus respectivos públicos-alvo. Devido ao fato de haver
tantas maneiras de se executar uma tarefa, eu comecei a perceber que eu
não tinha que me limitar à implementação de outra pessoa. Antes de
descobrir o Linux, nós simplesmente lidávamos com problemas em outros
Sistemas Operacionais como se não tivéssemos escolha. A coisa era o que
era, não importando se você gostasse ou não. Com Linux, o conceito de
escolha começou a emergir. Se você não gostou de alguma coisa, você
seria livre, até encorajado, a mudá-la.
Eu tentei várias distribuições, mas não consegui me decidir por
nenhuma. Elas eram ótimas distribuições em seu próprio direito. Não era
mais uma questão de certo ou errado. O problema havia se transformado
em uma questão de gosto pessoal. Com todas aquelas opções disponíveis,
tornou-se aparente que não haveria um sistema que seria perfeito para
mim. Então eu me propus a criar meu próprio sistema Linux que estaria
totalmente em conformidade com minhas preferências pessoais.
Para realmente fazer meu próprio sistema, eu resolvi compilar tudo a
partir do código fonte em vez de usar pacotes pré-compilados. Esse
sistema Linux “perfeito” teria a força de vários sistemas sem suas
fraquezas visíveis. A princípio, a ideia era bastante amedrontadora.
Mas eu me mantive comprometido à ideia de que esse sistema poderia ser
construído.
Após lidar com questões como dependências recíprocas e erros durante a
compilação, eu finalmente construí um sistema Linux customizado. O
sistema era totalmente operacional e perfeitamente utilizável como
qualquer outro sistema Linux disponível na época. Mas era minha própria
criação. Montar um sistema desses foi muito gratificante. A única coisa
que poderia ser melhor seria se eu mesmo tivesse escrito cada programa.
Essa foi a melhor coisa que se seguiu.
Conforme eu compartilhei meus objetivos e minhas experiências com
outros membros da comunidade Linux, ficou aparente que havia um
interesse firme nessas ideias. Logo ficou claro que tal sistema Linux
customizado não serviria apenas para as necessidades específicas dos
usuários, mas também como uma oportunidade ideal para programadores e
administradores elevarem suas (existentes) habilidades com Linux. Como
resultado desse interesse amplo, o Projeto Linux From Scratch nasceu.
Este livro Linux From Scratch é o núcleo do projeto. O livro provê a
base e as instruções necessárias para você modelar e construir seu
próprio sistema. Mesmo este livro disponibilizando instruções que
resultarão em um sistema que funciona corretamente, você é livre para
alterar as instruções para adaptá-las às suas necessidades, o que é, em
parte, uma importante parte deste projeto. Você permanece no controle;
nós só damos uma mão para ajudá-lo a começar sua própria jornada.
Eu sinceramente espero que você se divirta trabalhando no seu próprio
Linux From Scratch e aproveite os benefícios de ter um sistema
verdadeiramente seu.
--
Gerard Beekmans
gerard AT linuxfromscratch D0T org
Audiência
Existem muitas razões pelas quais você desejaria ler este livro. Uma
das questões que muitas pessoas levantam é “por que ir ao longo de toda
a dificuldade de construir manualmente um sistema Linux desde o zero
quando você pode simplesmente baixar e instalar um existente?”
Uma importante razão para a existência deste projeto é para te ajudar a
aprender como um sistema Linux funciona de dentro para fora. Construir
um sistema LFS ajuda a demonstrar o que torna o Linux de interesse, e
como as coisas funcionam juntas e dependem umas das outras. Uma das
melhores coisas que essa experiência de aprendizado pode prover é a
habilidade de personalizar um sistema Linux para se ajustar às suas [de
quem construir] próprias necessidades únicas.
Outro benefício chave de LFS é que ele te permite ter mais controle
sobre o sistema sem confiar na implementação Linux de ninguém. Com LFS,
você está no banco do motorista e dita cada aspecto do sistema.
LFS te permite criar sistemas muito compactos. Quando se instala
distribuições regulares, você frequentemente é forçado a instalar
muitos programas grandes os quais provavelmente nunca serão usados ou
entendidos. Esses programas desperdiçam recursos. Você talvez argumente
que, com os discos rígidos e CPUs de hoje, tais recursos não mais são
uma consideração. As vezes, entretanto, você ainda está restrito por
considerações de tamanho se nenhuma outra coisa. Pense acerca de CDs
inicializáveis, mídias USB e sistemas embarcados. Essas são áreas onde
LFS pode ser benéfico.
Outra vantagem de um sistema personalizado Linux construído é
segurança. Ao compilar o sistema inteiro desde o zero, você está
empoderado para auditar tudo e aplicar todas as correções de segurança
desejadas. Não mais é necessário aguardar que outra pessoa compile os
pacotes binários para consertar uma brecha de segurança. A menos que
você examine a correção e a implemente você mesma(o), você não tem
garantias de que o novo pacote binário foi construído corretamente e
adequadamente conserta o problema.
A finalidade do [projeto] Linux From Scratch é a de construir um
sistema em nível de fundação completo e utilizável. Se você não estiver
afim de construir seu próprio sistema Linux desde o zero, então você
talvez nunca se beneficie das informações neste livro.
Existem muito mais boas razões para construir seu próprio sistema LFS
para listá-las todas aqui. No final, educação é, de longe, a mais
poderosa das razões. Conforme você continue em sua experiência LFS,
você descobrirá o poder que informação e conhecimento verdadeiramente
trazem.
Arquiteturas Alvo do LFS
A principal arquitetura alvo do LFS são os processadores AMD/Intel x86
(32 bits) e x86_64 (64 bits). Por outro lado, as instruções neste livro
também são conhecidas por funcionar, com algumas modificações, com os
processadores Power PC e ARM. Para construir um sistema que utiliza uma
dessas CPUs, o principal pré-requisito, em adição àqueles que estão nas
próximas páginas, é uma distribuição Linux existente, como uma
instalação LFS prévia, Ubuntu, Red Hat/Fedora, SuSE, ou outra
distribuição que abranja a arquitetura que você tem. Note também que
uma distribuição de 32-bits pode ser instalada e usada como um sistema
hospedeiro em um computador AMD/Intel de 64-bits.
Para construir LFS, o ganho de construção em um sistema 64-bits
comparado a um sistema 32-bits é mínimo. Por exemplo, em uma construção
de LFS-9.1 de teste em um sistema baseado em CPU Core i7-4790, usando
quatro núcleos, as seguintes estatísticas foram verificadas:
Arquitetura Tempo de Construção Tamanho de Construção
32-bit 239.9 minutos 3.6 GB
64-bit 233.2 minutos 4.4 GB
Como você pode ver, no mesmo hardware, a construção de 64-bit é apenas
3% mais rápida e é 22% maior que a construção de 32-bit. Se você
planeja usar LFS como um servidor LAMP, ou como um firewall, então uma
CPU de 32-bits talvez seja largamente suficiente. Por outro lado,
vários pacotes em BLFS atualmente precisam de mais que 4GB de RAM para
serem construídos e (ou) para executarem, de forma que se você planeja
usar LFS como um desktop, então os autores de LFS recomendam construir
em um sistema 64-bits.
A construção de 64-bit padrão que é resultante do LFS é considerado um
sistema 64-bit “puro”. Ou seja, ele suporta apenas executáveis 64-bit.
Construir um sistema “multi-lib” [de múltiplas bibliotecas] exige a
compilação de muitos aplicativos duas vezes, uma vez para um sistema de
32-bit e outra vez para um sistema de 64-bit. Isso não é diretamente
suportado em LFS, pois interferiria no objetivo educacional de prover
as instruções necessárias para um sistema Linux base estrito. Alguns
editores de LFS/BLFS mantém uma bifurcação de LFS para multilib, que é
acessível em
[179]https://www.linuxfromscratch.org/~thomas/multilib/index.html.
Porém, esse é um tópico avançado.
Pré-requisitos
Construir um sistema LFS não é uma tarefa simples. Essa tarefa exige um
certo nível de conhecimento de administração de sistemas Unix para
resolver problemas e corretamente executar os comandos listados. Em
particular, no mínimo, você já deveria ter a habilidade de usar linha
de comando (shell) para copiar ou mover arquivos e diretórios, listar
diretórios e conteúdos de arquivos, e navegar entre os diretórios.
Também é de se esperar que você tenha um conhecimento razoável sobre
como usar e instalar software [em um sistema] Linux.
Devido ao fato do livro LFS assumir que você tem pelo menos esse nível
básico de habilidades, os vários fóruns de suporte do LFS não serão
adequados para ajudá-lo nessas áreas. Você vai perceber que suas
perguntas com relação a esse conhecimento básico não serão respondidas
ou serão remetidas à lista de itens essenciais de pré-leitura.
Antes de construir um sistema LFS nós recomendamos a leitura do
seguinte:
* Software-Building-HOWTO
[180]http://www.tldp.org/HOWTO/Software-Building-HOWTO.html
Esse é um guia compreensivo de como construir e instalar pacotes de
software Unix “genéricos” no Linux. Embora tenha sido escrito há
algum tempo, esse guia ainda fornece um bom resumo das técnicas
básicas necessárias para construir e instalar programas.
* Beginner's Guide to Installing from Source
[181]http://moi.vonos.net/linux/beginners-installing-from-source/
Esse guia fornece um bom sumário de habilidades básicas e de
técnicas necessárias para construir software a partir do código
fonte.
LFS e Padrões
A estrutura do LFS segue os padrões Linux tão rigorosamente quanto
possível. Os principais padrões são:
* [182]POSIX.1-2008.
* [183]Filesystem Hierarchy Standard (FHS) Version 3.0
* [184]Linux Standard Base (LSB) Version 5.0 (2015)
O LSB tem quatro padrões separados: Core, Desktop, Runtime
Languages (linguagens em tempo de execução), e Imaging. Em adição
às exigências genéricas, há as exigências específicas de cada
arquitetura. Existem também duas áreas para uso experimental: Gtk3
e Graphics. LFS tenta ficar de acordo com as arquiteturas
discutidas na sessão anterior.
Nota
Muitas pessoas não concordam com os requisitos do LSB. O principal
propósito de definir tais requisitos é o de garantir que softwares
proprietários possam ser instalados e executados adequadamente em
um sistema que respeite o referido padrão. Sendo o LFS baseado em
código fonte, a(o) usuária(o) tem total controle sobre quais
pacotes quer e muitas(os) escolhem não instalar alguns dos pacotes
especificados pelo LSB.
Criar um sistema LFS completo capaz de passar nos testes das
certificações do LSB é possível, mas não sem muitos pacotes adicionais
que estão além do escopo do LFS. Esses pacotes adicionais tem
instruções para instalação no BLFS.
Pacotes disponibilizados pelo LFS que são necessários para satisfazer os
requisitos do LSB
LSB Core:
Bash, Bc, Binutils, Coreutils, Diffutils, File, Findutils, Gawk, Grep,
Gzip, M4, Man-DB, Ncurses, Procps, Psmisc, Sed, Shadow, Tar,
Util-linux, Zlib
LSB Desktop:
Nenhum
LSB Runtime Languages:
Perl, Python
LSB Imaging:
Nenhum
LSB Gtk3 e Gráficos LSB (Uso Experimental):
Nenhum
Pacotes disponibilizados pelo BLFS necessários para satisfazer os requisitos
do LSB
LSB Core:
At, Batch (uma parte de At), Cpio, Ed, Fcrontab, LSB-Tools, NSPR, NSS,
PAM, Pax, Sendmail (ou Postfix ou Exim), time
LSB Desktop:
Alsa, ATK, Cairo, Desktop-file-utils, Freetype, Fontconfig, Gdk-pixbuf,
Glib2, GTK+2, Icon-naming-utils, Libjpeg-turbo, Libpng, Libtiff,
Libxml2, MesaLib, Pango, Xdg-utils, Xorg
LSB Runtime Languages:
Libxml2, Libxslt
LSB Imaging:
CUPS, Cups-filters, Ghostscript, SANE
LSB Gtk3 e Gráficos LSB (Uso Experimental):
GTK+3
Pacotes não suportados pelo LFS ou BLFS necessários para satisfazer os
requisitos do LSB
LSB Core:
Nenhum
LSB Desktop:
Qt4 (mas Qt5 é fornecido)
LSB Runtime Languages:
Nenhum
LSB Imaging:
Nenhum
LSB Gtk3 e Gráficos LSB (Uso Experimental):
Nenhum
Justificativa para os pacotes no Livro
Como declarado anteriormente, a finalidade do [projeto] LFS é a de
construir um sistema em nível de fundação completo e utilizável. Isso
inclui todos os pacotes necessários para replicá-lo ao tempo que
disponibiliza uma base relativamente pequena sobre a qual a(o)
usuária(o) pode personalizar um sistema mais completo baseado nas
escolhas da(o) usuária(o). Isso não significa que o LFS é o menor
sistema possível. Vários pacotes importantes estão inclusos que não são
estritamente necessários. As listas abaixo documentam a justificativa
para cada pacote no livro.
* Acl
Esse pacote contém utilitários para administrar Listas de Controle
de Acesso, as quais são usadas para definir direitos de acesso
discricionariamente mais finamente refinados para arquivos e para
diretórios.
* Attr
Esse pacote contém aplicativos para a administração de atributos
estendidos sobre objetos do sistema de arquivos.
* Autoconf
Esse pacote contém aplicativos para produzir shell scripts que
podem configurar automaticamente o código fonte a partir de um
modelo do desenvolvedor. É geralmente necessário para reconstruir
um pacote após atualizações para os procedimentos de construção.
* Automake
Esse pacote contém aplicativos para gerar arquivos Make a partir de
um modelo. É geralmente necessário para reconstruir um pacote após
atualizações para os procedimentos de construção.
* Bash
Esse pacote satisfaz um requisito central do LSB para
disponibilizar uma interface Bourne Shell para o sistema. Foi
escolhido em vez de outros pacotes de shell pelo seu uso comum e
extensas capacidades que transcendem as funções básicas do shell.
* Bc
Esse pacote disponibiliza uma linguagem de processamento numérico
com precisão arbitrária. Ele satisfaz requisitos necessários quando
da construção do Kernel do Linux.
* Binutils
Esse pacote contém um linker, um assembler e outras ferramentas
para manipular arquivos objeto. Os aplicativos nesse pacote são
necessários para compilar a maioria dos pacotes em um sistema LFS e
além.
* Bison
Esse pacote contém a versão GNU do yacc (Yet Another Compiler
Compiler) necessário para construir vários outros aplicativos no
LFS.
* Bzip2
Esse pacote contém aplicativos para compressão e descompressão de
arquivos. É necessário para descomprimir muitos pacotes do LFS.
* Check
Esse pacote contém um conjunto de ferramentas de teste para outros
aplicativos.
* Coreutils
Esse pacote contém um número de aplicativos essenciais para
visualização e manipulação de arquivos e de diretórios. Esses
aplicativos são necessários para o gerenciamento de arquivos por
linha de comando, e são necessários para os procedimentos de
instalação de cada pacote em LFS.
* D-Bus
Esse pacote contém aplicativos para implementar um sistema de
barramento de mensagem, o qual é um caminho simples para aplicações
conversarem com outras.
* DejaGNU
Esse pacote contém um sistema para testar outros aplicativos.
* Diffutils
Esse pacote contém aplicativos que mostram as diferenças entre
arquivos ou diretórios. Esses aplicativos podem ser usados para
criar correções, e também são usados em muitos procedimentos de
construção dos pacotes.
* E2fsprogs
Esse pacote contém os utilitários para manipular os sistemas de
arquivos ext2, ext3 e ext4. Esses são os sistemas de arquivos mais
comuns e amplamente testados que o Linux suporta.
* Expat
Esse pacote contém uma biblioteca relativamente pequena de análise
de XML. Ela é exigida pelo módulo de Perl XML::Parser.
* Expect
Esse pacote contém um aplicativo para execução de scripts de
diálogos com outros aplicativos interativos. É comumente usado para
testar outros pacotes.
* File
Esse pacote contém um utilitário para determinar o tipo de um dado
arquivo ou arquivos. Uns poucos pacotes precisam dele em seus
scripts de construção.
* Findutils
Esse pacote contém aplicativos para encontrar arquivos em um
sistema de arquivos. É usado em muitos scripts de construção dos
pacotes.
* Flex
Esse pacote contém um utilitário para gerar aplicativos que
reconhecem padrões em textos. É a versão GNU do aplicativo lex
(lexical analyzer). É necessário para construir vários pacotes do
LFS.
* Gawk
Esse pacote contém aplicativos para manipular arquivos de texto. É
a versão GNU do awk (Aho-Weinberg-Kernighan). É usado em muitos
outros scripts de construção dos pacotes.
* GCC
Esse pacote é o Gnu Compiler Collection. Ele contém os compiladores
C e C++ assim como vários outros não construídos por LFS.
* GDBM
Esse pacote contém a biblioteca GNU Database Manager. É usado por
um outro pacote do LFS, Man-DB.
* Gettext
Esse pacote contém utilitários e bibliotecas para
internacionalização e localização de numerosos pacotes.
* Glibc
Esse pacote contém a biblioteca C principal. Aplicativos Linux não
funcionarão sem ela.
* GMP
Esse pacote contém bibliotecas matemáticas que fornecem funções
úteis para aritmética de precisão arbitrária. É necessário para
compilar GCC.
* Gperf
Esse pacote contém um aplicativo que gera uma função perfeita de
hash a partir de uma chave configurada. Ele é exigido por Eudev.
* Grep
Esse pacote contém aplicativos para procurar dentro de arquivos.
Esses aplicativos são usados pela maioria dos scripts de construção
dos pacotes.
* Groff
Esse pacote contém aplicativos para processamento e formatação de
texto. Uma função importante desses aplicativos é a de formatar
páginas de manual.
* GRUB
Esse pacote é o Grand Unified Boot Loader. Ele é um dos vários
gerenciadores de inicialização disponíveis, mas é o mais flexível.
* Gzip
Esse pacote contém aplicativos para compressão e descompressão de
arquivos. Ele é necessário para descomprimir muitos pacotes em LFS.
* Iana-etc
Esse pacote fornece dados para serviços e protocolos de rede. Ele é
necessário para habilitar suporte a rede adequado.
* Inetutils
Esse pacote contém aplicativos para administração básica de rede.
* Intltool
Esse pacote contém ferramentas para a extração de sequências de
caracteres traduzíveis a partir de arquivos fonte.
* IProute2
Esse pacote contém aplicativos para redes IPv4 e IPv6 básicas e
avançadas. Ele foi escolhido em vez de outros pacotes comuns de
ferramentas de rede (net-tools) pelo seu suporte a IPv6.
* Jinja2
Esse pacote é um módulo de Python para modelos de texto. Ele é
exigido para construir Systemd.
* Kbd
Esse pacote contém arquivos de tabelas chave, utilitários de
teclados que não são estadunidenses, e um número de fontes de
console.
* Kmod
Esse pacote contém aplicativos necessários para administrar os
módulos de kernel do Linux.
* Less
Esse pacote contém um visualizador de textos muito bom que permite
rolar para cima ou para baixo quando se visualiza um arquivo. Ele
também é usado pelo Man-DB para visualizar páginas de manual.
* Libcap
Esse pacote implementa as interfaces do espaço de usuário para as
capacidades POSIX 1003.1e disponíveis em kernels Linux.
* Libelf
O projeto elfutils fornece bibliotecas e ferramentas para dados de
arquivos ELF e DWARF. A maior parte dos utilitários nesse pacote
está disponível em outros pacotes, porém a biblioteca é necessária
para construir o kernel Linux usando a configuração padrão (e mais
eficiente).
* Libffi
Esse pacote implementa uma interface de programação portável, de
alto nível, para várias convenções de chamada. Alguns aplicativos
talvez não saibam, ao tempo da compilação, quais argumentos são
para serem passados para uma função. Por exemplo, um interpretador
talvez possa ser informado, ao tempo de execução, acerca do número
e dos tipos de argumentos usados para chamar uma dada função.
Libffi pode ser usada em tais aplicativos para fornecer uma ponte a
partir do aplicativo interpretador para o código compilado.
* Libpipeline
O pacote Libpipeline contém uma biblioteca para manipular pipelines
de subprocessos de uma maneira flexível e conveniente. Ele é
exigido pelo pacote Man-DB.
* Libtool
Esse pacote contém o script GNU de suporte a bibliotecas genéricas.
Ele esconde a complexidade do uso de bibliotecas compartilhadas em
uma interface consistente e portável. Ele é necessário para as
ferramentas de testes em outros pacotes do LFS.
* Linux Kernel
Esse pacote é o Sistema Operacional. Ele é o Linux no ambiente
GNU/Linux.
* M4
Esse pacote contém um processador geral de macro de texto, útil
como uma ferramenta de construção para outros aplicativos.
* Make
Esse pacote contém um aplicativo para direcionar a construção de
pacotes. Ele é exigido por quase todos os pacotes em LFS.
* MarkupSafe
Esse pacote é um módulo Python para processamento de sequências de
caracteres em HTML/XHTML/XML com segurança. Jinja2 exige esse
pacote.
* Man-DB
Esse pacote contém aplicativos para encontrar e visualizar páginas
de manual. Ele foi escolhido em vez do pacote man devido a
capacidades superiores de internacionalização. Ele faz as vezes do
aplicativo man.
* Man-pages
Esse pacote contém o conteúdo atual das páginas de manual básicas
do Linux.
* Meson
Esse pacote fornece uma ferramenta de software para automatizar a
construção de software. A finalidade principal para Meson é a de
minimizar a quantidade de tempo que desenvolvedores de software
precisam investir configurando o sistema de construção deles. Ele é
exigido para construir Systemd, bem como muitos pacotes BLFS.
* MPC
Esse pacote contém funções para a aritmética de números complexos.
Ele é exigido por GCC.
* MPFR
Esse pacote contém funções para aritmética de precisão múltipla.
Ele é exigido por GCC.
* Ninja
Esse pacote contém um sistema pequeno de construção com um foco em
velocidade. Ele é desenhado para ter os arquivos de entrada dele
gerados por um sistema de construção de alto nível, e para executar
construções o mais rápido possível. Esse pacote é exigido por
Meson.
* Ncurses
Esse pacote contém bibliotecas para manipulação independente de
terminal de telas de carácter. Ele é frequentemente usado para
fornecer controle de cursor para um sistema com menus. Ele é
necessitado por um número de pacotes em LFS.
* Openssl
Esse pacote fornece ferramentas e bibliotecas de gerenciamento
relacionadas a criptografia. Essas são úteis para fornecer funções
criptográficas para outros pacotes, incluindo o kernel Linux.
* Patch
Esse pacote contém um aplicativo para modificar ou criar arquivos
aplicando um arquivo patch tipicamente criado pelo aplicativo diff.
Ele é necessitado pelo procedimento de construção para vários
pacotes LFS.
* Perl
Esse pacote é um interpretador para a linguagem de tempo de
execução PERL. Ele é necessário para a instalação e ferramentas de
teste de vários pacotes do LFS.
* Pkg-config
Esse pacote fornece um aplicativo que retorna metadados acerca de
uma biblioteca ou pacote instalado.
* Procps-NG
Esse pacote contém aplicativos para monitorar processos. Esses
aplicativos são úteis para administração de sistema, e são também
usados pelos scripts de inicialização do LFS.
* Psmisc
Esse pacote contém aplicativos para mostrar informações acerca de
processos em execução. Esses aplicativos são úteis para
administração de sistema.
* Python 3
Esse pacote fornece uma linguagem interpretada que tem uma
filosofia de desenho que enfatiza a legibilidade de código.
* Readline
Esse pacote é um conjunto de bibliotecas que oferecem capacidades
de edição e de histórico de linha de comando. Ele é usado por Bash.
* Sed
Esse pacote permite a edição de texto sem abri-lo em um editor de
texto. Ele também é necessitado pela maioria dos scripts de
configuração dos pacotes do LFS.
* Shadow
Esse pacote contém aplicativos para manipulação de senhas de uma
maneira segura.
* Systemd
Esse pacote fornece um aplicativo init e várias capacidades
adicionais de inicialização e de controle de sistema como uma
alternativa ao Sysvinit. Ele é usado por muitas distribuições
comerciais.
* Tar
Esse pacote fornece capacidades de empacotamento e de extração de
virtualmente todos os pacotes usados em LFS.
* Tcl
Esse pacote contém a Tool Command Language usada em muitas
ferramentas de teste em pacotes do LFS.
* Texinfo
Esse pacote contém aplicativos para leitura, escrita e conversão de
páginas info. Ele é usado nos procedimentos de instalação de muitos
pacotes LFS.
* Util-linux
Esse pacote contém uma variedade de aplicativos utilitários. Entre
eles estão utilitários para manipulação de sistemas de arquivos,
consoles, partições e mensagens.
* Vim
Esse pacote contém um editor. Ele foi escolhido por causa da
compatibilidade com o clássico editor vi e o seu número gigante de
capacidades poderosas. Um editor é uma escolha muito pessoal para
muitas(os) usuárias(os) e qualquer outro editor poderia ser
substituído se assim desejar.
* XML::Parser
Esse pacote é um módulo Perl que interage com Expat.
* XZ Utils
Esse pacote contém aplicativos para compressão e descompressão de
arquivos. Ele fornece a maior compressão geralmente disponível e é
útil para descomprimir pacotes nos formatos XZ ou LZMA.
* Zlib
Esse pacote contém rotinas de compressão e descompressão usadas por
alguns aplicativos.
* Zstd
Esse pacote contém rotinas de compressão e descompressão usadas por
alguns aplicativos. Ele fornece taxas altas de compressão e um
intervalo muito amplo de intercâmbios entre compressão /
velocidade.
Tipografia
Para fazer as coisas mais fáceis de serem seguidas, existem algumas
convenções tipográficas usadas neste livro. Esta sessão contém alguns
exemplos da formatação tipográfica encontrada ao longo de Linux From
Scratch.
./configure --prefix=/usr
Essa forma de texto é desenhada para ser digitada do jeito que está, a
menos que seja dito o contrário no texto que a envolve. É também usada
na sessão de explicação para identificar quais dos comandos estão sendo
referenciados.
Em alguns casos, uma linha lógica é estendida em duas ou mais linhas
físicas com uma barra invertida no final da linha.
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \
--prefix=/tools --disable-nls --disable-werror
Note que a barra invertida deve ser seguida imediatamente por uma
quebra de linha. Outros espaços em branco como tabulação criarão
resultados incorretos.
install-info: unknown option '--dir-file=/mnt/lfs/usr/info/dir'
Essa forma de texto (largura fixa) mostra a saída em tela, geralmente
como resultado de um comando executado. Esse formato é também utilizado
para mostrar nomes de arquivos, como /etc/ld.so.conf.
Emphasis
Essa forma de texto é usada para vários propósitos neste livro. Seu
propósito principal é o de enfatizar pontos ou itens importantes.
[185]https://www.linuxfromscratch.org/
Esse formato é usado para hiperlinks tanto dentro da comunidade LFS e
para páginas externas. Isso inclui HOWTOs, locais de downloads e
páginas da Internet.
cat > $LFS/etc/group << "EOF"
root:x:0:
bin:x:1:
......
EOF
Esse formato é usado quando da criação de arquivos de configuração. O
primeiro comando diz para o sistema criar o arquivo $LFS/etc/group a
partir do que seja digitado nas linhas seguintes até encontrar a
sequência “End Of File” (EOF). Portanto, toda essa sequência é
geralmente digitada da maneira como é vista.
<REPLACED TEXT>
Esse formato é usado para encapsular texto que não deve ser digitado
como visto ou para operações de “copiar-colar”.
[OPTIONAL TEXT]
Esse formato é usado para encapsular texto que é opcional.
passwd(5)
Esse formato é usado para referir-se a uma página de manual específica
(man). O número entre parênteses indica uma seção específica dentro dos
manuais. Por exemplo, passwd tem duas páginas de manual. Conforme as
instruções de instalação do LFS, essas duas páginas de manual estarão
localizadas em /usr/share/man/man1/passwd.1 e
/usr/share/man/man5/passwd.5. Quando o livro usa passwd(5) ele está se
referindo especificamente a /usr/share/man/man5/passwd.5. man passwd
exibirá a primeira página de manual que corresponde a “passwd”, a qual
será /usr/share/man/man1/passwd.1. Para esse exemplo, você precisará
executar man 5 passwd para ler a página sendo especificada. Perceba que
a maioria das páginas de manual não tem nomes duplicados de páginas em
diferentes seções. Portanto, man <nome do aplicativo> geralmente é
suficiente.
Estrutura
Este livro é dividido nas seguintes partes.
Parte I – Introdução
A Parte I explica algumas notas importantes sobre como proceder com a
instalação do LFS. Essa seção também fornece metainformação sobre o
livro.
Parte II – Preparando para a Construção
A Parte II descreve como se preparar para o processo de construção
—criando uma partição, baixando os pacotes, e compilando as ferramentas
temporárias.
Parte III – Construindo o Conjunto Cruzado de Ferramentas do LFS e
Ferramentas Temporárias
A Parte III fornece instruções para a construção das ferramentas
necessárias para a construção do sistema LFS final.
Parte IV - Construindo o Sistema LFS
A Parte IV guia o leitor ao longo da construção do sistema LFS
—compilando e instalando todos os pacotes, um por um, configurando os
scripts de inicialização e instalando o kernel. O sistema Linux
resultante é a base sobre a qual outros aplicativos podem ser
construídos para expandir o sistema conforme desejado. No final deste
livro, há uma lista de referência de fácil uso listando todos os
aplicativos, bibliotecas e arquivos importantes que foram instalados.
Parte V - Apêndices
A Parte V fornece informação acerca do próprio livro incluindo
acrônimos e termos, reconhecimentos, dependências de pacotes, uma
listagem dos scripts de inicialização do LFS, licenças para a
distribuição do livro, e um índice compreensível de pacotes,
aplicativos, bibliotecas, e scripts.
Errata e Avisos de Segurança
Os aplicativos utilizados para criar um sistema LFS estão sendo
constantemente atualizados e melhorados. Alertas de segurança e
correções de defeitos talvez se tornem disponíveis após o livro LFS ter
sido lançado. Para checar se versões de pacotes ou instruções neste
lançamento de LFS necessitam de quaisquer modificações para acomodar
vulnerabilidades de segurança ou outras correções de defeitos, por
favor visite
[186]https://www.linuxfromscratch.org/lfs/errata/11.1-systemd/ antes de
continuar com a sua construção. Você deveria tomar nota de quaisquer
mudanças mostradas e aplicá-las às seções relevantes do livro conforme
você progride com a construção do sistema LFS.
Adicionalmente, os editores de Linux From Scratch mantém uma lista de
vulnerabilidades de segurança descobertas depois que um livro foi
lançado. Para checar se existem quaisquer vulnerabilidades ativas de
segurança, por favor visite
[187]https://www.linuxfromscratch.org/lfs/advisories/ antes de proceder
com sua construção. Você deveria tomar nota de quaisquer conselhos e
executar os passos para corrigir quaisquer vulnerabilidades de
segurança conforme você progride com a construção do sistema LFS.
Parte I. Introdução
Capítulo 1. Introdução
1.1. Como Construir um Sistema LFS
O sistema LFS será construído usando uma distribuição Linux já
instalada (tal como Debian, OpenMandriva, Fedora, ou openSUSE). Esse
sistema Linux existente (o anfitrião) será usado como ponto de partida
para fornecer os aplicativos necessários, incluindo um compilador, um
vinculador, e um interpretador de comandos, para construir o novo
sistema. Selecione a opção “desenvolvimento” durante a instalação da
distribuição para estar apto a acessar essas ferramentas.
Como uma alternativa a instalar uma distribuição separada em sua
máquina, você talvez deseje usar um LiveCD de uma distribuição
comercial.
[188]Capítulo 2 deste livro descreve como criar uma nova partição Linux
nativa e sistema de arquivos. Esse é o local onde o novo sistema LFS
será compilado e instalado. [189]Capítulo 3 explica quais pacotes e
patches precisam ser baixados para construir um sistema LFS e como eles
devem ser armazenados no novo sistema de arquivos. [190]Capítulo 4
discute a configuração de um ambiente de trabalho apropriado. Por
favor, leia o [191]Capítulo 4 cuidadosamente, uma vez que ele explica
vários assuntos importantes sobre os quais você deve estar ciente antes
de começar seu trabalho ao longo do [192]Capítulo 5 e além.
[193]Capítulo 5, explica a instalação do conjunto inicial de
ferramentas, (binutils, gcc, e glibc) usando técnicas de compilação
cruzada para isolar as novas ferramentas das do sistema anfitrião.
[194]Capítulo 6 te mostra como compilar cruzadamente utilitários
básicos usando o recém construído conjunto cruzado de ferramentas.
[195]Capítulo 7 então entra em um ambiente "chroot" e usa as