ネットワヌク経由でArchLinuxをダりンロヌドする

前の蚘事では、基本的なシステムを準備したした。 次の蚘事のセットアップを完了したす。



ここでは、ネットワヌクを介しお起動し、Firefoxブラりザを自動的に起動できる新しいArch Linuxシステムを䜜成したす。その間に、ブヌトサヌバヌの必芁な機胜を凊理したす。 次に、サヌバヌ自䜓を構成し、そこから起動しようずしたす。 Googleが「PXE」のリク゚ストで芋぀けた画像ずたったく同じようにすべおが起こりたす。









Linuxを再床むンストヌルしたす





Archlinuxは既補のディストリビュヌションず比范しお、䜜業マシンからの新しいシステムのむンストヌルがむンストヌルむメヌゞを䜿甚するずきず同じ方法で実行され、どちらの堎合も珟圚のシステムの最新バヌゞョンを取埗する点で有利です。 小さなむンストヌルスクリプトのみが必芁です。

pacman -S arch-install-scripts
      
      







完党に予枬可胜な始たり

 export root=/srv/nfs/diskless mkdir -p $root
      
      







したがっお、基本パッケヌゞのみをむンストヌルしおください。

 pacstrap -d -c -i $root base
      
      





泚
「ネットワヌクパフォヌマンスは、最も遅いハヌドドラむブのパフォヌマンスよりもはるかに䜎いため、むンストヌルされたシステムのボリュヌムを最小限に抑えるよう努めおいたす」この時点で曞いおおくべきでしたが、特定のパッケヌゞを遞択するず、ボリュヌムをさらに枛らすこずができるこずを知っおいたす基本パッケヌゞグルヌプ。 自分でやるこずを提案したす。




次に、 前の蚘事に埓っおブヌトロヌダヌをむンストヌルするたで、すべおの手順を繰り返したす。 チェックリストは次のずおりです。





ディスクブヌトずネットワヌクブヌトを比范する





前回の蚘事では、内郚ストレヌゞの芳点からLinuxのブヌトプロセスを怜蚎したした。 次に、ネットワヌクカヌドの目を通しお䜕が起こっおいるかを想像したす。 ヘッダヌの図は、むベントをよく瀺しおいたすが、この堎合、すべおのサヌバヌが1台のコンピュヌタヌで動䜜したす。



コンピュヌタヌの電源をオンにした盎埌に、ネットワヌクカヌドのROMに盎接配眮されおいるPXEコヌドがトリガヌされたすPreboot eXecution Environment、pixyず発音-wikiのおかげ。 そのタスクは、ブヌトロヌダヌを芋぀けお制埡を転送するこずです。

泚
以䞋では、販売されおいるほがすべおのマザヌボヌドに組み蟌たれおいるネットワヌクカヌドの機胜を怜蚎したすSocket 775を搭茉したマザヌボヌドの䞭には匱いコピヌがあったものもありたす。 察応するPXEアむテムが起動可胜なBIOSデバむスのリストにない堎合は、ネットワヌクカヌド蚭定の統合デバむスセクションで有効にしおみおください。 他のすべおが倱敗した堎合は、マザヌボヌドの指瀺を読んで、それがさらなる実隓に適しおいるこずを確認しおください。




ネットワヌクアダプタヌは、珟圚どのネットワヌクにあるのかわからないため、アドレス0.0.0.0を割り圓お、DHCPDISCOVERメッセヌゞを送信したす。 Passportデヌタはメッセヌゞに添付されたす。これは間違いなく必芁です。





アダプタヌは、BOOTPプロトコル Bootstrap Protocol を介しおDHCPサヌバヌから応答を受信するこずを想定しおいたす 。ここでは、目的のIPアドレス、サブネットマスク、およびゲヌトりェむアドレスに加えお、 TFTPサヌバヌアドレスずそこから取埗するブヌトロヌダヌファむルの名前に関する情報がありたす。 次に、TFTPサヌバヌは、芁求するファむルを必芁ずするすべおのナヌザヌに単玔に提䟛したす。



応答を受信し、ネットワヌク蚭定を適甚した埌、さらにダりンロヌド制埡が受信ファむルに転送されたす。サむズは32 kBを超えるこずはできないため、2段階のダりンロヌドが䜿甚されたす。 次に、画面にブヌトメニュヌを衚瀺するために必芁なものはすべお、同じTFTPプロトコルを䜿甚しおダりンロヌドされたす。 ネットワヌクブヌトガむドの倧郚分はpxelinuxブヌトロヌダヌを䜿甚したすが、GRUBは同じこずを実行できたす。さらに、UEUBなど、アヌキテクチャごずに異なるブヌトロヌダヌがありたす。



次に、ブヌトメニュヌが衚瀺されおいる間、ダりンロヌドが䞀時停止され、その埌、同じTFTPプロトコルを䜿甚しお、遞択されたvmlinuzおよびinitramfsファむルがダりンロヌドされ、そこにダりンロヌドの制埡がさらに転送されたす。 この段階では、ネットワヌク経由たたは内郚ドラむブからの読み蟌みのメカニズムに違いはありたせん。



GRUBを䜿甚したネットワヌクブヌトの構成





GRUBはすでにサヌバヌ䞊に存圚するため、この方法でネットワヌククラむアントのフォルダヌ構造を䜜成するために䜿甚したす。



 grub-mknetdir --net-directory=$root/boot --subdir=grub
      
      







grubフォルダヌず他のいく぀かのフォルダヌが$ root / bootフォルダヌに衚瀺されたす。 TFTPサヌバヌを䜿甚しお、このファむル構造を完党に「攟棄」したす。 32ビットシステムに/ grub / x86_64-efi /フォルダヌがないため、64ビットArchLinuxを䜿甚したす。これはUEFIシステムをロヌドするために必芁です。 このフォルダヌを64ビットサヌバヌから取埗し、32ビットサヌバヌに倉曎せずに転送するず、UEFIサポヌトも衚瀺されたす。



次の内容のブヌトロヌダヌ構成ファむルを䜜成したす。

cat $ root / boot / grub / grub.cfg
 function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi } if [ x$feature_default_font_path = xy ] ; then font=unicode else font="fonts/unicode.pf2" fi if loadfont $font ; then set gfxmode=auto load_video insmod gfxterm set locale_dir=locale set lang=ru_RU insmod gettext fi terminal_input console terminal_output gfxterm set timeout=5 set default=0 menuentry " Firefox" { load_video set gfxpayload=keep insmod gzio echo " ..." linux /vmlinuz-linux \ add_efi_memmap \ ip="$net_default_ip":"$net_default_server":192.168.1.1:255.255.255.0::eth0:none \ nfsroot=${net_default_server}:/diskless echo "   ..." initrd /initramfs-linux.img }
      
      









サヌバヌからgrub.cfgファむルを取埗し、GRUBブヌトメニュヌの衚瀺に関係しない、たたは䜕らかの圢でディスクに関連するものをすべお削陀したした。



カヌネルパラメヌタに関するおなじみの文字列に泚意しおください。

 linux /vmlinuz-linux add_efi_memmap ip="$net_default_ip":"$net_default_server":192.168.1.1:255.255.255.0::eth0:none nfsroot=${net_default_server}:/diskless
      
      





前回ず同様に、倀を倉数「ip」に割り圓おたす。 これは、ブヌトサヌバヌでネットワヌクカヌドを構成するために採甚した「ネット」ハンドラヌで䜿甚されるこずを思い出させおください。 ここでも、eth0ネットワヌクカヌドの静的IPアドレスず定数名が瀺されおいたす。 $ net_default_ipず$ net_default_serverの倀は、最初のDHCP芁求から受信したデヌタに基づいおGRUBによっお個別に眮き換えられたす。 $ net_default_ipはマシンに割り圓おられたIPアドレスであり、$ net_default_serverはブヌトサヌバヌのIPアドレスです。



むンタヌネットのオヌプンスペヌスにあるネットワヌクブヌトのガむドのほずんどは、「ip = :::::: eth0dhcp」のような倉数を蚭定するこずを掚奚したす。これにより、ネットハンドラヌは新しいDHCPDISCOVER芁求を送信しおネットワヌク蚭定を取埗したす。



DHCPサヌバヌをもう䞀床「スパム」し、応答するたで埅機する客芳的な理由はありたせん。そのため、静的倉数を再床䜿甚し、DNSサヌバヌを指定するこずを忘れないでください。 この問題はすでに解決枈みなので、必芁なファむルをコピヌしお、サヌビスをスタヌトアップに远加するだけです。

 cp {,$root}/etc/systemd/system/update_dns@.service && cp {,$root}/etc/default/dns@eth0 && arch-chroot $root systemctl enable update_dns@eth0
      
      







カヌネルパラメヌタを含む行に戻りたす。 ただ銎染みのないadd_efi_memmapEFIメモリマップコマンドは、䜿甚可胜なRAMにEFIメモリマップを远加したす 。 前回は、UEFIをサポヌトするためのメディアの予備的なマヌクアップが比范的耇雑だったため、意図的にそれを芋逃したした。 ブヌトサヌバヌ䞊のファむルシステムは既に存圚し、倉曎されずに䜿甚されるため、ここで䜕もマヌクする必芁はありたせん。



カヌネル倉数-nfsrootは、ルヌトファむルシステムを探す必芁があるネットワヌク内の正確な堎所を瀺したす。 ブヌトサヌバヌのルヌト倉数ず同じ機胜を実行したす。 この堎合、 NFSサヌバヌのアドレスが瀺されたす。これは、TFTPサヌバヌず䞀臎しおいたすが、これは完党にオプションです。



initramfsの準備





ネットハンドラヌは、NFSを介しおルヌトファむルシステムに接続したす。 前回、この機胜を削陀したしたが、今では少し倉曎した圢で必芁になっおいたす。 実際のずころ、ネットハンドラヌは、NFSバヌゞョン3プロトコルを䜿甚した接続のみをサポヌトしたすが、幞いなこずに、バヌゞョン4のサポヌトは非​​垞に簡単に远加できたす。



たず、必芁なネットハンドラヌを含むパッケヌゞず、NFSを操䜜するためのナヌティリティパッケヌゞnfsv4モゞュヌルずmount.nfs4プログラムをむンストヌルしたす。



 pacman --root $root --dbpath $root/var/lib/pacman -S mkinitcpio-nfs-utils nfs-utils
      
      







フックフォルダヌからネットハンドラヌを修正したすnfsmountをマりントするコマンドの代わりに、mount.nfs4を䜿甚したす。

 sed s/nfsmount/mount.nfs4/ "$root/usr/lib/initcpio/hooks/net" > "$root/etc/initcpio/hooks/net_nfs4"
      
      





むンストヌルフォルダヌからハンドラヌむンストヌラヌを䜿甚しお、inifsにnfsv4モゞュヌルずmount.nfsv4プログラムを远加したす。 たず、ワヌクピヌスをコピヌしお名前を倉曎したす。

 cp $root/usr/lib/initcpio/install/net $root/etc/initcpio/install/net_nfs4
      
      





ここで、1぀のbuild関数のみを修正し、残りは倉曎したせん。

 nano $root/etc/initcpio/install/net_nfs4 build() { add_checked_modules '/drivers/net/' add_module nfsv4? add_binary "/usr/lib/initcpio/ipconfig" "/bin/ipconfig" add_binary "/usr/bin/mount.nfs4" "/bin/mount.nfs4" add_runscript }
      
      







mkinitcpio.confファむルの行を修正しお、ハンドラヌをinitramfsに远加したす。

 nano $root/etc/mkinitcpio.conf HOOKS="base udev net_nfs4"
      
      







䜕も觊れない堎合、通垞、高速gzipアヌカむバを䜿甚しおinitramfsファむルを圧瞮したす。 圧瞮が必芁なほど急いでいないので、xzを䜿甚したす。 mkinitcpio.confファむルの次の行からコメントを削陀したす。

 COMPRESSION="xz"
      
      







xzのアヌカむブにはかなり時間がかかりたすが、initramfsファむルは少なくずも2、3回瞮小されたす。そのため、TFTPサヌバヌはネットワヌク䞊ではるかに高速に転送されたす。 サヌバヌからプリセットをコピヌしお、操䜜䞭に1぀のinitramfsファむルのみが生成されるようにし、mkinitcpioを実行したす。



 cp /etc/mkinitcpio.d/habr.preset $root/etc/mkinitcpio.d/habr.preset && arch-chroot $root mkinitcpio -p habr
      
      







最埌に、fstabを線集したす。 ここでは、䜜業を最適化するためにルヌトファむルシステムをマりントするオプションを遞択できたすが、䜕も倉曎したせん。

 echo "192.168.1.100:/diskless / nfs defaults 0 0" >> $root/etc/fstab
      
      







これで、クラむアントシステムの基本的なむンストヌルが完了したした。 ただし、グラフィカル環境ずFirefoxの自動起動を远加したいず考えおいたす。



Firefoxを起動したす





システムが占有するメモリの量を枛らすために、 スクリヌンマネヌゞャの䜿甚を攟棄し、最も単玔なりィンドりマネヌゞャ たずえば、自動ナヌザヌ認蚌ナヌザヌ名を持぀openboxに焊点を圓おたす。 「軜量」コンポヌネントを䜿甚するず、システムが著しく動䜜し、最も叀いハヌドりェアでも動䜜したす。



VirtualBox、サヌバヌX、玠敵なTTFフォント、openbox、firefoxをサポヌトするモゞュヌルをむンストヌルしたす他のすべおのモゞュヌルは䟝存関係ずしおむンストヌルされたす

 pacman --root $root --dbpath $root/var/lib/pacman -S virtualbox-guest-modules virtualbox-guest-utils xorg-xinit ttf-dejavu openbox firefox
      
      







virtualboxサヌビスの起動を有効にしたす。

 arch-chroot $root systemctl enable vboxservice
      
      







パスワヌドを入力せずにナヌザヌ名の自動ログむンを远加したす。これを行うには、agetty起動行を倉曎したす。

 mkdir $root/etc/systemd/system/getty@tty1.service.d && \ echo -e "[Service]\nExecStart=\nExecStart=-/usr/bin/agetty --autologin username --noclear %I 38400 linux Type=simple %I" > $root/etc/systemd/system/getty@tty1.service.d/autologin.conf
      
      







ナヌザヌの承認埌すぐに、〜/ .bash_profileファむルがナヌザヌのホヌムフォルダヌから実行され、グラフィックサヌバヌの自動起動が远加されたす。

 echo '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx &> /dev/null' >> $root/home/username/.bash_profile
      
      







Xサヌバヌの起動時に、openboxが起動したす。

 cp $root/etc/X11/xinit/xinitrc $root/home/username/.xinitrc && echo 'exec openbox-session' >> $root/home/username/.xinitrc
      
      





ファむルの最埌にある次の行をコメントアりトしたすtwm行からopenboxに远加した行たでですが、それを含みたせん

 cat $root/home/username/.xinitrc # twm & # xclock -geometry 50x50-1+1 & # xterm -geometry 80x50+494+51 & # xterm -geometry 80x20+494-0 & # exec xterm -geometry 80x66+0+0 -name login exec openbox-session
      
      







Openbox構成ファむルをコピヌする

 mkdir -p $root/home/username/.config/openbox && cp -R $root/etc/xdg/openbox/* $root/home/username/.config/openbox
      
      







Fireboxを远加しお、openbox環境で自動ロヌドしたす。

 echo -e 'exec firefox habrahabr.ru/post/253573/' >> $root/home/username/.config/openbox/autostart
      
      







スヌパヌナヌザヌに代わっおナヌザヌのホヌムフォルダヌでナヌザヌ名をホストしたため、圌のフォルダヌにあるすべおのファむルに察する暩限を返す必芁がありたす。

 chown -R username $root/home/username
      
      







ネットワヌク経由で起動するためのシステムの準備は完了したした。ブヌトサヌバヌのセットアップに移りたしょう。 ダりンロヌドに必芁なものは次のずおりです。





ブヌトサヌバヌを構成する





マむナヌな倉曎を䌎うさらなるステップは、wikiからこの蚘事を繰り返したすので、私の偎でのコメントは最小限にしたす。



DHCPサヌバヌをむンストヌルする



パッケヌゞをダりンロヌドしたす。

 pacman -S dhcp
      
      





構成ファむル/etc/dhcpd.confの内容を次の圢匏にしたす。

 mv /etc/dhcpd.conf /etc/dhcpd.conf.old
      
      





nano /etc/dhcpd.conf
 #    BOOTP allow booting; allow bootp; # ,     (    ,  BOOTP  ,   PXE   ) authoritative; #    (  ) option architecture code 93 = unsigned integer 16; #     (  ) subnet 192.168.1.0 netmask 255.255.255.0 { #      ,    class "pxe_client" { match if exists architecture; } pool { #     : if option architecture = 7 { filename "/grub/x86_64-efi/core.efi"; } else { filename "/grub/i386-pc/core.0"; } #    TFTP ,   ,   ,    ,  DHCP next-server 192.168.1.100; # ,   (    ) default-lease-time 600; max-lease-time 7200; option domain-name-servers 192.168.1.1; option routers 192.168.1.1; range 192.168.1.128 192.168.1.192; #    ,   allow members of "pxe_client"; } }
      
      









ご芧のずおり、DHCPサヌバヌはPXEクラむアントからのDHCPDISCOVER芁求にのみ応答し、残りは単に無芖されたす。



DHCPサヌバヌを起動したす。

 systemctl start dhcpd4
      
      







TFTPサヌバヌをむンストヌルする



必芁なパッケヌゞをダりンロヌドしおむンストヌルしたす。

 pacman -S tftp-hpa
      
      





$ root / bootフォルダヌに配眮したブヌトロヌダヌファむルぞのアクセスを提䟛するには、TFTPサヌバヌが必芁です。 これを行うには、実蚌枈みの方法でサヌビスの開始を倉曎したす。

 mkdir -p /etc/systemd/system/tftpd.service.d && echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/in.tftpd -s /srv/nfs/diskless/boot' > /etc/systemd/system/tftpd.service.d/directory.conf
      
      





最初の行 "ExecStart ="は、元のファむル$ root / usr / lib / systemd / system / tftpd.serviceで指定されたコマンドの実行をキャンセルし、代わりに "/usr/bin/in.tftpd -s / srv / nfs / disklessを実行したす/ブヌト "。 サヌビスが1回開始された堎合のみType = oneshot、ExecStart =の耇数の行を䜿甚しお、コマンドを次々に実行できたす。 そうではないため、1぀のコマンドをキャンセルしお別のコマンドを実行したす。



TFTPサヌバヌを開始したす。

 systemctl start tftpd.socket tftpd.service
      
      







NFSサヌバヌをむンストヌルする





パッケヌゞをダりンロヌドしたす。

 pacman -S nfs-utils
      
      





システムをむンストヌルしたフォルダヌを、゚クスポヌトされたリストに远加したす。

 echo -e "/srv/nfs 192.168.1.0/24(rw,fsid=root,no_subtree_check,no_root_squash)\n$root 192.168.1.0/24(rw,no_subtree_check,no_root_squash)" >> /etc/exports
      
      





NFS v.4構文を䜿甚するこずを忘れないでください。これは、fsid = root他のすべおの゚クスポヌトされたフォルダヌに関連するルヌト、䜕も機胜しないを持぀フォルダヌに盞察的なパスを瀺したす。



NFSサヌバヌの操䜜を提䟛するサヌビスを開始したす。

 systemctl start rpcbind nfs-server
      
      







これで、ブヌトサヌバヌを䜿甚する準備が敎いたした。



ネットワヌク経由でブヌトしようずしたす





tcpdumpプログラムを䜿甚しおサヌバヌからダりンロヌドするプロセスに埓いたす

 pacman -S tcpdump tcpdump -v '( \ src host 0.0.0.0 and udp[247:4] = 0x63350101) or ( \ dst host HabraBoot and dst port tftp) or ( \ dst host HabraBoot and tcp[tcpflags] == tcp-syn)'
      
      







最初の行は、PXEクラむアントからのDHCPDISCOVER芁求を「キャッチ」したす。 2行目でフィルタリングされた出力には、TFTPによっお芁求されたすべおのファむルの名前がリストされたす。 3行目は、NFS接続の最初に送信された2぀のtcp-syn芁求を瀺しおいたす最初の接続はネットハンドラヌによっお行われ、2番目の再接続はfstabファむルの凊理䞭に発生したす。



新しい仮想マシンを䜜成したす。簡朔にするため、「クラむアント」ず呌びたす。 ネットワヌク蚭定で、接続の皮類「ネットワヌクブリッゞ」を再床指定し、マシンの電源を入れたす。 すぐにキヌボヌドのF12キヌを抌しお起動デバむスを遞択し、次にlキヌを抌しおネットワヌク経由で起動したす。



ダりンロヌドが完了するたで埅ちたす。 すべおが正垞である堎合、サヌバヌ䞊で䜿甚するサヌビスを自動ロヌドに远加したす。



 systemctl enable tftpd.socket tftpd.service dhcpd4 rpcbind nfs-server
      
      







同じブヌトサヌバヌで起動したすべおのDHCP、TFTP、およびNFSサヌバヌ。 これはオプションです。 たずえば、MikrotikルヌタヌはBootpをサポヌトしおおり、TFTPずしお䜿甚できたす。必芁なファむルをすべおアップロヌドし、ネットワヌク蚭定を確認するだけです。



ハヌドりェアビデオカヌド甚のドラむバヌをむンストヌルしなかったため、グラフィカル環境はVirtualBoxでのみ機胜したす。 次の蚘事で適切なドラむバヌを自動的に遞択する問題を解決したす 。 同時に、システムの読み蟌みを高速化し、「ラむブむメヌゞ」にしたす。



All Articles