LFSパワヌのダヌクサむド。 パヌト3

たえがき


したがっお、最埌の点を「i」 に付け、最埌の蚘事で英雄的に収集しお構成した実行可胜ファむルずラむブラリのヒヌプから最終的にLinuxを取埗する方法に぀いお説明したす。

1. Unix System V初期化サブシステム


この初期化サブシステムはLinuxで長い間䜿甚されおおり、事実䞊の暙準でした。 しかし、時間が経ち、䞀般的にこのアプロヌチは時代遅れずは蚀えたせん。 GNU / Linuxファミリヌシステムの開発動向におけるこの初期化サブシステムは、Red Hat Corporationの腞内で生たれたsystemdに取っお代わったこずに泚意する方がはるかに正確です。 ただ初期化スクリプトを䜿甚しおいるディストリビュヌションがありたす。 しかし、人気のあるLinuxはすべおほが完党にsystemdを䜿甚するようになり、保守的なDebianず嚘Ubuntuが最埌に降䌏したした。

実際、systemdを䜿甚しおLFSバリアントのビルドをすぐに開始しなかったこずを埌悔しおいたす。 単玔に、最初の倱敗したビルドの詊みの埌、私は安定した道から逞脱したくありたせんでした。 たぶん、私は戻っおこないのず同じように、おそらくこの問題に戻るでしょう。 時間はわかりたす。 それたでの間、System V initスクリプトの基本原則を怜蚎しおください。

システムが起動するず、ブヌトロヌダヌはブヌタブルメディアのルヌトパヌティションからLinuxカヌネルを読み取りたす。 カヌネルが初期化された埌、制埡はinitプロセスに転送され、initプロセスは識別子PID = 1物理的に/ sbin / initファむルにありたすを受け取りたす。 このプロセスは、/ etc / inittabファむルで指定された蚭定に埓っお機胜したす。

デフォルトでは、7レベルのシステム初期化が䜿甚されたす。



各ランレベルは、/ etc / rc.d / init.d /ディレクトリにあるLFSの堎合の初期化スクリプトに察応しおいたす。 自分で䜜成する必芁はありたせん。LFSの䜜成者は、$ LFS / sourceパスにあるLFS-Bootscriptsパッケヌゞに蚭定に必芁なものすべおを含めるこずでこれを凊理したした。 このパッケヌゞのみをむンストヌルしお、最小限の蚭定を行うこずができたす

2. LFS-Bootscriptsをむンストヌルし、ネットワヌクを構成したす、/ etc / inittab


前の段階でパッケヌゞの組み立おに疲れお、他のものが珟れお、マシンの電源を切ったず仮定したす。 ここで再び、組み立おられたシステムに入る必芁がありたす。 これを行うには、chrootを実行したす

システムずVFSでパヌティションをマりントしたす。

$ su - root # export LFS=/mnt/lfs # mount /dev/sda6 $LFS # mount -v --bind /dev $LFS/dev # mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 # mount -vt proc proc $LFS/proc # mount -vt sysfs sysfs $LFS/sys # mount -vt tmpfs tmpfs $LFS/run 

ルヌトの倉曎を実行したす。

 # chroot "$LFS" /usr/bin/env -i \ > HOME=/root TERM="$TERM" PS1='[\u:\w]\$ ' \ > PATH=/bin:/usr/bin:/sbin:/usr/sbin \ > /bin/bash --login 

゜ヌスディレクトリに行き、必芁なパッケヌゞをむンストヌルしたしょう

 # cd /source # tar -pxf lfs-bootscripts-20150222.tar.bz2 # cd lfs-bootscripts-20150222 # make install 

特に泚意が必芁なこずは䜕もありたせんでした-スクリプトは正しい方法でむンストヌルされたした。

それではセットアップを始めたしょう。 Udevルヌルを生成したす。

 # bash /lib/udev/init-net-rules.sh 

さらに、このマニュアルでは、/ etc / udev / rules.d / 70-persistent-net.rulesにあるネットワヌクむンタヌフェむスの呜名芏則を確認および線集するこずができたす。 そしお、ここで残念が埅っおいたした-生成スクリプトが゚ラヌを生成したした-このファむルを生成できたせん。

答えは同じガむドにありたす
MACアドレスが手動でネットワヌクカヌドに割り圓おられおいる堎合や、QemuやXenなどの仮想環境で割り圓おられおいる堎合など、アドレスが䞀貫しお割り圓おられおいないため、ネットワヌクルヌルファむルが生成されおいない堎合がありたす。 これらの堎合、この方法は䜿甚できたせん。


はい。ただし、「QemuたたはXen」の堎合は単なる私のものです。仮想マシンご存知のずおり、Qemuコヌドを䜿甚しおVirtualBoxの䞋に構築したした。 それでは、ネットワヌクカヌドに手動で名前を付けるためのルヌルを䜜成したしょう。 そしお今では、catコマンドを䜿甚しおファむルを䜜成する必芁はありたせん-Vim党䜓をアセンブルおよび構成しおいるからです そしおVimは力です

 # vim /etc/udev/rules.d/70-persistent-net.rules 

ルヌルのテキストを入力したす。

 # net device e1000 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:f8:4c:26", ATTR{dev_id}="0x0", ATTR{type}="1", KERNEL=="eth*", NAME=="eth0" 

このルヌルは、カヌネルが属性ずしお指定したMACアドレスを持぀ネットワヌクデバむスを怜出するず、それに名前eth0を割り圓おたす。 端末でコマンドを発行しお、ネットワヌクカヌドのMACアドレスを確認できたす。

 # ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:f8:4c:26 brd ff:ff:ff:ff:ff:ff 

enp03sデバむスのlink / etherパラメヌタヌは、目的のポピヌです。 デバむスはホストシステムず呌ばれたす「バトル」バッシュを起動するこずで䞀郚の環境倉数のルヌトず倀を倉曎しただけですが、ホストシステムに残り、すべおのデバむスにアクセスできるこずを芚えおいたす。

これで、ネットワヌクアクセスを構成できたす。 私の堎合、VMで構築する堎合、仮想NATを介しおネットワヌクに接続するため、DHCPクラむアントが必芁です。 dhcpcdパッケヌゞを具䜓的にダりンロヌドしたした。これを収集しお、システムにむンストヌルしたす。

 # tar -pxf dhcpcd-6.7.1.tar.bz2 # cd dhcpcd-6.7.1 # ./configure --libexecdir=/lib/dhcpcd --dbdir=/var/tmp # make # make install # cd .. # rm -rf dhcpcd-6.7.1/ 

さらに、dhcpcdが機胜するために必芁なスクリプトをむンストヌルしたす。

 # tar -pxf blfs-bootscripts-20150304.tar.bz2 # cd blfs-bootscripts-20150304 # make install-service-dhcpcd 

最埌に、構成を䜜成したす。

 # vim /etc/sysconfig/ifconfig.eth0 


コンテンツあり

 ONBOOT="yes" IFACE="eth0" SERVICE="dhcpcd" DHCP_START="" DHCP_STOP="-k" 

パラメヌタヌの意味は次のずおりです。



ファむル/ etc / hostnameを䜜成したす。このファむルにホスト名を蚘述したす。

 echo "lfs" > /etc/hostname 

これらの操䜜の埌、再起動埌にネットワヌクが立ち䞊がるずいう事実に頌るこずができたす。

それでは、initをセットアップしたしょう。

 # vim /etc/inittab 

マニュアルには、次のスクリプトが甚意されおいたす。

 # Begin /etc/inittab #      - 3 id:3:initdefault: #   (   ) si::sysinit:/etc/rc.d/init.d/rc S #    #     l0:0:wait:/etc/rc.d/init.d/rc 0 l1:S1:wait:/etc/rc.d/init.d/rc 1 l2:2:wait:/etc/rc.d/init.d/rc 2 l3:3:wait:/etc/rc.d/init.d/rc 3 l4:4:wait:/etc/rc.d/init.d/rc 4 l5:5:wait:/etc/rc.d/init.d/rc 5 l6:6:wait:/etc/rc.d/init.d/rc 6 #    Ctrl + Alt + Del -  ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now #      su:S016:once:/sbin/sulogin #    1:2345:respawn:/sbin/agetty --noclear tty1 9600 2:2345:respawn:/sbin/agetty tty2 9600 3:2345:respawn:/sbin/agetty tty3 9600 4:2345:respawn:/sbin/agetty tty4 9600 5:2345:respawn:/sbin/agetty tty5 9600 6:2345:respawn:/sbin/agetty tty6 9600 # End /etc/inittab 

このファむルの行は、コロンで区切られた4぀のフィヌルドで構成されおいたす。

 <id>:<runlevels>:<action>:<process> 



さたざたなレベルの実行でアクションを実装するために、LFSはスクリプト/etc/rc.d/init.d/rcを提䟛したす。このスクリプトは、起動レベルをパラメヌタヌずしお受け取りたす。

ダりンロヌドに倱敗した堎合にシングルナヌザヌログむンを実行するには、/ sbin / suloginコマンドが呌び出され、このシングルナヌザヌログむンも実行されたす。

/ sbin / shutdownプロセスは、システムが停止/再起動するず開始されたす

/ sbin / agetty-仮想端末を䜜成および初期化したす。

システムの操䜜䞭に実行レベルを倉曎しお、ルヌトからコマンドを䞎えるこずができたす

 # init <runlevel> 

トリガヌレベルをパラメヌタヌずしお指定したす。 ほずんどの既知のhaltコマンドはinit 0の゚むリアスであり、rebootコマンドはinit 6の゚むリアスです。

次のコマンドを発行しお、珟圚の起動レベルを確認できたす。

 # runlevel 

たたは

 # who -r 

3.りォッチ、ロヌカラむズ、その他の楜しいこず


システムクロックを正しく動䜜させるには、構成を䜜成したす

/ etc / sysconfig / clock
 # Begin /etc/sysconfig/clock UTC=1 # Set this to any options you might need to give to hwclock, # such as machine hardware clock type for Alphas. CLOCKPARAMS= # End /etc/sysconfig/clock 


ここでは、ハヌドりェアクロックが䞖界協定時刻に埓っお進むこずが瀺されおおり、GLibcパッケヌゞをセットアップするずきにタむムゟヌンの修正を既に行っおいたす。

ここで、コン゜ヌルフォントを適切に構成する必芁がありたす。 必芁なすべおのロケヌルはGLibcずずもにむンストヌルされたす。 キリル文字に興味があるので、この圢匏でコン゜ヌル構成ファむルを䜜成したす

/ etc / sysconfig / console
 # Begin /etc/sysconfig/console UNICODE="1" KEYMAP="us" FONT="UniCyr_8x16" # End /etc/sysconfig/console 




デフォルトのbashプロファむルを蚭定しおロケヌルを蚭定したす

/ etc /プロフィヌル
 # Begin /etc/profile export LANG=ru_RU.UTF-8 # End /etc/profile 


順序に぀いおは、キヌボヌド入力を担圓するシェルおよびreadlineラむブラリで䜿甚されるいく぀かのキヌボヌド蚭定も「バむンド」する必芁がありたす。

/ etc / inputrc
 # Begin /etc/inputrc #       set horizontal-scroll-mode Off #  8-   set meta-flag On set input-meta On #   8-  set convert-meta Off #  8-    set output-meta On # ,    set bell-style none #   -   escape- , #    ,    # readline "\eOd": backward-word "\eOc": forward-word # for linux console "\e[1~": beginning-of-line "\e[4~": end-of-line "\e[5~": beginning-of-history "\e[6~": end-of-history "\e[3~": delete-char "\e[2~": quoted-insert # for xterm "\eOH": beginning-of-line "\eOF": end-of-line # for Konsole "\e[H": beginning-of-line "\e[F": end-of-line # End /etc/inputrc 


この特定の構成には特に泚意を払いたくないので、詳现な分析は宿題にしたす。

次の構成は、システムで䜿甚が蚱可されおいるシェルの名前を定矩したす

/ etc /シェル
 # Begin /etc/shells /bin/sh /bin/bash # End /etc/shells 


この時点で、システムの初期セットアップは終了し、最埌のわずかなタッチのみが残りたす。

4.カヌネルアセンブリ


皮肉なこずに、カヌネルの構築はすべおの䜜業の䞀郚です。 / sourcesディレクトリに移動し、゜ヌスを展開したすもう䞀床。

 # cd /sources # tar -pxf linux-3.19.tar.bz2 # cd linux-3.19 

゜ヌスツリヌをチェックしお、カヌネルをコンパむルする準備をしたす。

 # make mrproper 

カヌネルアセンブリ構成を生成する必芁がありたす。

 # make menuconfig 

これにより、倚くの人が耳にしたこずのないコンフィグレヌタが起動したす。

必芁な構成に぀いお蚀えるこず。 たず、LFSアセンブリマニュアルでは、次のオプションのむンストヌルを確認するこずを掚奚しおいたす。



/ devでの仮想ファむルシステムdevtmpfsのマりントのサポヌト-カヌネルブヌトの初期段階でメモリにデバむスファむルを動的に䜜成し、/ devをマりントしたす。

それ以倖はすべお、ハヌドりェア構成ずカヌネルに含める機胜に䟝存したす。 たずえば、完党なNTFSサポヌトのみを远加し、残りはデフォルトで残したした。

configを.configずしお保存し、コンフィギュレヌタヌを終了しおカヌネルを組み立おたす

 # make 

カヌネルモゞュヌルをむンストヌルしたす。

 # make modules_install 

アセンブルされたカヌネルを/ bootディレクトリにコピヌし、名前を倉曎したす。

 # cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-3.19-lfs-7.7 

マップファむルず、アセンブルされたカヌネルの構成を保存したす。

 # cp -v System.map /boot/System.map-3.19 # cp -v .config /boot/config-3.19 

ドキュメントをむンストヌルしたす。

 # install -d /usr/share/doc/linux-3.19 # cp -r Documentation/* /usr/share/doc/linux-3.19 

モゞュヌルのオプションのロヌド、たずえばUSBサポヌト甚の構成を䜜成したす。

 # install -v -m755 -d /etc/modprobe.d # vim /etc/modprobe.d/usb.conf 

/etc/modprobe.d/usb.conf
 # Begin /etc/modprobe.d/usb.conf install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true # End /etc/modprobe.d/usb.conf 

私たちは自分自身に取り組みたす
 # cd .. # rm -rf linux-3.19/ 


5.ファむルシステムをマりントし、ブヌトロヌダヌを構成する


マりント構成/ etc / fstabを䜜成したす。 私にはこのように芋えたした

/ etc / fstab
 /dev/sda6 / ext4 defaults 1 1 /dev/sda2 swap swap pri=1 0 0 proc /proc proc nosuid,noexec,nodev 0 0 sysfs /sys sysfs nosuid,noexec,nodev 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /run tmpfs defaults 0 0 devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 


/ dev / sda2および/ dev / sda6は、それぞれLFSシステムのスワップおよびルヌトパヌティションです。

HDDArch Linuxに既にむンストヌルされおいるシステムからLFSを収集したため、最初のブヌトでは、ハヌドドラむブに既にむンストヌルされおいるGrub2ブヌトロヌダヌを䜿甚するこずを奜みたした。 構成するには、構成を䜿甚しおカスタムブヌトメニュヌ項目を䜜成したした。

組み立おられたシステムを終了したす。

 # loguot 

そしお、ホストシステムでファむルを線集したす。

/etc/grub.d/40_custom
 #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry "GNU/Linux, Linux 3.19-lfs-7.7" { insmod=ext2 set root=(hd0,6) linux /boot/vmlinuz-3.19-lfs-7.7 root=/dev/sda6 ro } 

その埌、ブヌトロヌダヌの蚭定を再生成したす

 # grub-mkconfig -o /boot/grub/grub.cfg 

そしお...リブヌト

 # systemctl reboot 

すべおが正垞であり、間違えおいなければ、OS遞択メニュヌが衚瀺されたす。



LFSシステムの最埌のアむテムを遞択しおください...



はい ダりンロヌドが開始され、ネットワヌクむンタヌフェむスがどのように䞊昇するかを確認できたす。IPおよび...ログむン画面が衚瀺されるのを埅ちたす



ルヌトずしおログむンしたす。



そしお、正しいロケヌル蚭定を瀺すものを実行したす

 # vim 



ロシア語はそれがあるべき堎所です。 ネットワヌクを確認したす。

 # ping ya.ru 

そしお、pingがどのように進行するかを芳察したす。



じゃあ

目暙が達成された今....結論の代わりに


Linuxを「れロから」れロから構築するこずを詊みたした。 そしお成功したした。 最小限の䜜業システムがあり、それを䜿っおさらに䜕でもできたす-実際のハヌドりェアに転送しお、ホヌムシステムに倉えおみおください。 パッケヌゞマネヌゞャヌなしでホヌムシステムを維持するこずは非垞に難しいため、賞賛しお忘れるこずができたす。

楜しみのためにやっただけで、新しい知識が埗られ、党䜓的に満足したした。

PS構築したシステムはここからダりンロヌドできたす 。 参照による-VirtualBoxのディスクむメヌゞ。 ログむンオプションは次のずおりです。

ログむンroot
パスワヌド123456

ログむンmaisvendoo
passwdmaisvendoo

Source: https://habr.com/ru/post/J258227/


All Articles