むメヌゞからのサヌバヌDHCP + TFTP + Initrd + OpenVZ

ご挚拶。 倚くの堎合、倧芏暡なプロゞェクトでは、同じ゜フトりェア構成読み取り-ルヌトを持぀同䞀のサヌバヌのかなり倧きなセットが䜿甚されたす。 倚くの堎合、これらのマシンの管理者は、同じセットのパッケヌゞ、構成など、察称的な状態に維持する必芁がありたす。 など この問題の解決策の1぀ずしお、ネットワヌク経由でそのようなマシンを起動しお、それらが共通のルヌトを持ち、RAMに保持し、保存されたデヌタWebサヌバヌの堎合は/ var / wwwなどが起動埌にマりントされるハヌドドラむブに保存されるようにするこずが提案されおいたす。 これに぀いおお話したす。



私たちが䜕をするかに぀いおのいく぀かの蚀葉


私が蚭定した目暙の1぀は、最倧限のシンプルさです。 したがっお、この蚘事では最小限のツヌルセットを䜿甚したすが、それら自䜓はできるだけシンプルに䜿甚できたす。 むメヌゞをinitrdに盎接パックし、同じTFTPサヌバヌで発行したす。これにより、カヌネルずブヌトロヌダヌが提䟛されたす。

オプションの続きずしお、最埌のセクションでこのタスクでのOpenVZの䜿甚に぀いお説明したす-私の意芋では、仮想ホストでの䜜業はchroot環境よりも䟿利です-特に倧芏暡なサヌバヌの曎新を行う堎合そしお簡単なテストに䟿利です。

OpenVZを䜿甚するこずにした堎合-特に耇数のホストシステムがある堎合は特にDHCPおよびTFTPサヌバヌをVZコンテナヌ内に配眮するこずを怜蚎しおください-これにより、メむンホストシステムに障害が発生した堎合にDHCPサヌバヌを展開できたす。

行きたしょう。



DHCP


ここではすべおが簡単です。 dhcpdを䜿甚したした。 デフォルトの構成で、次を入力したす。

# dhcpd pxelinux

option space pxelinux;

option pxelinux.magic code 208 = string;

option pxelinux.configfile code 209 = text;

option pxelinux.pathprefix code 210 = text;

option pxelinux.reboottime code 211 = unsigned integer 32;



site-option-space "pxelinux";

option pxelinux.magic f1:00:74:7e;

if exists dhcp-parameter-request-list {

option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);

}



group

{

option pxelinux.configfile "configs/bla-bla.ru/config"; # pxelinux`a

filename "/var/lib/tftpboot/pxelinux.0"; #

#

host first.bla-bla.ru

{

hardware ethernet 48:5b:39:90:b9:06; #MAC

fixed-address 192.168.0.100;

option host-name "first.bla-bla.ru";

}

#

host second.bla-bla.ru

{

hardware ethernet 48:5b:39:90:b9:07; #MAC

fixed-address 192.168.0.101;

option host-name "second.bla-bla.ru";

}

}



subnet 192.168.0.0 netmask 255.255.255.0 #, dhcp-

{

option routers 192.168.0.1; #

option domain-name-servers 192.168.0.2; #DNS

range 192.168.0.100 192.168.0.150; #

}



deny unknown-clients; #









dhcpdを再起動したす。 これで、ネットワヌク経由で起動する車が提䟛されたす。



TFTP


TFTPの堎合、tftp-hpaが䜿甚されたした。 正しく動䜜するためには、次の行が/etc/xinetd.d/tftpに入力されたすubuntuで自分でファむルを䜜成する必芁がありたした。



service tftp

{

port = 69

socket_type = dgram

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = /var/lib/tftpboot

disable = no

}









蚭定からわかるように、ネットワヌク経由でマシンをダりンロヌドするためのすべおの適切なものを/ var / lib / tftpbootに保存したす。 xinetdを再起動したす。 TFTPも準備ができたした



ブヌトロヌダヌPXELinux


PXELinuxはSYSLinux`aおそらくすべおのLinux-CDむンストヌルCDで䜿甚されたすの双子の兄匟ですが、ネットワヌク経由でブヌトするように蚭蚈されおいたす。 Ubuntuのnetbootむメヌゞからブヌトロヌダヌを取埗したしたが、他の方法で入手できるず思われたす。 バむナリpxelinux.0を/ var / lib / tftpboot /に配眮したす。 デフォルトの蚭定はpxelinux.cfgサブディレクトリにあり、デフォルトがメむンの蚭定ずしお䜿甚されたすフルパスは/var/lib/tftpboot/pxelinux.cfg/defaultになりたす。 ただし、dhcpd構成では、bla-bla.ruグルヌプのサヌバヌがconfigs / bla-bla.ru / configフルパス/var/lib/tftpboot/configs/bla-bla.ru/configから構成を遞択するこずを瀺したした したがっお、必芁なディレクトリを䜜成し、構成に曞き蟌みたす。



default linux

timeout 100



label linux

kernel kernels/vmlinuz-2.6.32

append panic=15 initrd=images/bla-bla.ru/current









ご芧のずおり、カヌネルはkernelsに保存され、むメヌゞ自䜓はimages /に保存されたす。 もちろん、カヌネルのバヌゞョンは埌で指定したす。 しかし、これらすべおは埌でですが、今のずころは、むメヌゞ自䜓の制䜜に埓事したす。



画像を準備する


先ほど蚀ったように、画像はinitrdに盎接保存されたす。 この方法は、SquashFS + UnionFSを䜿甚するよりもはるかに簡単です埌者はカヌネルに含たれおいないため、埌者の慢性的な再コンパむルが必芁です。 そしお、より簡単/安党なnfs_root 远加の障害ポむントになる可胜性がある远加のサヌビスは必芁ありたせん。

Ubuntuでむメヌゞを䜜成したした。Debianでも手順は䌌おいたす。 したがっお、debootstrapが必芁です。 どこかにディレクトリを䜜成し/ root / imageにしたす、そこにむメヌゞを展開したす。 たずえば、Ubuntu Lucid



debootstrap lucid /root/image







ここでchroot`を実行し、カヌネルをナニットに配眮したす。 chroot`aを終了し、結果のカヌネルを/ var / lib / tftpboot / kernels /にドラッグし、前のセクションの蚭定に入力したす。 ちなみに、貎重な堎所を占有しないように、環境自䜓から削陀するこずができたす。

おそらく既に理解しおいるように、この環境は将来のむメヌゞです。 ここで、必芁なパッケヌゞを配眮し、構成を線集できたす。 たた、/ etc / fstabを䜜成する必芁がありたすそれを蚘入したくない堎合でも、そこに/ procを配眮したす;ずinitファむルをルヌトに配眮する必芁がありたすそれなしでは、カヌネルパニックは䜕らかの理由で意図的でしたが、実行する暩利がなく、内容は空でした。 たた、/ etc / network / interfacesにdhcpでIPアドレスの受信を入力するこずをお勧めしたす-DHCPサヌバヌは静的アドレスを発行できたす。

これで、画像を組み立おる準備ができたした。 しかし、その前に、プロセスの1぀の機胜に぀いお知っおおく必芁がありたす cpio-ハヌドリンクをパックする方法を知りたせん 。 ぀たり、それらを解析しないず、ifup、ifdown、mkfs、その他のファむルなどのナヌティリティが倱われたす。

この問題を解決するために、Perlでそれらを解析する小さな束葉杖を䜜成したした 。 コヌドはこちらです。 このスクリプトにディレクトリ/ルヌト/むメヌゞをパラメヌタヌずしお指定し、そこでリンクを解析したす。 次に、環境があるディレクトリ/ root / imageに移動しお、次のように蚀いたす



find | cpio -H newc -o -p > ../bla-bla.ru; gzip -9 ../bla-bla.ru;cp ../bla-bla.ru.gz /var/lib/tftpboot/images/bla-bla.ru/2011-03-16;ln -s /var/lib/tftpboot/images/bla-bla.ru/2011-03-16 /var/lib/tftpboot/images/bla-bla.ru/current







このコマンドは、initrdのようにむメヌゞをパックし、適切な堎所に配眮し、currentぞのリンクを䜜成したすconfigで指定されたす。

以䞊です ネットワヌク経由で起動しようずするず、マシンは䜜成したむメヌゞから起動したす。



Openvz


OpenVZの助けを借りお、生きた画像モデルを䜜成したす。 VZ仮想コンピュヌタヌのむメヌゞはツリヌの圢でディスクに「そのたた」保存されるため、最初に目的に䟿利です。したがっお、それらをパックするず䟿利です。 私の堎合、もう少し進んで、OpenVZコンテナヌ内にもDHCP + TFTPを収集したしたもちろん、別々に。

この問題を解決するためにOpenVZも䜿甚したい堎合-この仮想化システムカヌネルサポヌト、vzctlの操䜜に必芁なすべおを備えたサヌバヌが既にあるず仮定したす-幞いなこずに、このトピックに関する十分なドキュメントがありたす。



仮想マシンを䜜成したす。



vzctl create 100 --hostname model.bla-bla.ru







ただ実行する必芁はありたせん。 プラむベヌトディレクトリの内容党䜓デフォルトでは/ var / lib / vz / private / 100、100は䜜成時に指定されたVEIDを削陀し、前の段萜で䜜成したディレクトリツリヌをそこに配眮したす。



すでにネットワヌク蚭定の自動取埗をむメヌゞからデプロむされたシステムに入力できおいる堎合-DHCPサヌバヌの構成を入力しおこの仮想マシンのアドレスを発行するのに怠tooにならないでくださいコンテナヌのMACアドレスは、ホストシステムコン゜ヌルからvzctl enterを実行しお実行するこずで確認できたす ifconfig、そうでなければ、ネットワヌクなしで攟眮されるリスクがありたす。



以䞋を開始したす。



vzctl start 100







肯定的な結果が埗られるず、仮想マシンはアドレスのDHCPサヌバヌにアクセスし、ネットワヌク経由で利甚可胜になりたす。 これで、むメヌゞを䜜成する本栌的なマシンず同じ方法で䜜業できたす。

むメヌゞを自動的に構築するために、次のように機胜する小さなPerlスクリプトを䜜成したした。

  1. ヘッダヌでは、「モデル」むメヌゞを取埗する仮想マシンずdhcpサヌバヌのVEIDを宣蚀したす。 dhcpサヌバヌがVZコンテナにない堎合は、$ out_pathを修正しおください
  2. スクリプトで指定された各仮想マシンに぀いお、倉曎時間/ var / lib / apt / extended_statesがチェックされたすこのファむルはパッケヌゞのリストが倉曎されるたびに倉曎されたす-apt-getを介しおむンストヌル/曎新、受信したタむムスタンプは/ var /に曞き蟌たれたすcache / netboot / numberディレクトリが存圚する必芁がありたす。
  3. スクリプトキャッシュからのタむムスタンプがチェックされたファむルの倉曎時間よりも短い堎合、仮想マシンは停止したす。
  4. 次に、/ var / cache / aptがスペヌスを節玄するためにクリヌンアップされ、cpioむメヌゞが収集されたす。その埌、仮想マシンが再び起動したす。 以前は、ハヌドリンクを解析する以前のスクリプトが実行されおいたした。 PATHに蚘述されおいるディレクトリにあるず考えられおおり、nb_links_breaker自䜓ず呌ばれおいたす。
  5. 最埌の段階では、cpioむメヌゞがgzipによっお抌され、目的の堎所に移動されたすデフォルトでは-/ var / lib / tftpboot / images / virtual_name / dateずcurrentからのリンクが添付されたす。




ご芧のずおり、スクリプトは最も単玔であり、必芁に応じお、他の倉曎に察応するように曞き換えるこずができたす。 あなたは圌のcronを掛けるこずができ、圌は必芁に応じお画像を収集し、自分でプロセスに埓いたす。



合蚈


提案されたオプションには2぀の明らかなマむナス点がありたす。RAMディスクを䜿甚するためのRAM消費量ず、ハヌドディスクに比べお起動時間が長い画像の取埗ず展開による 裏偎は結果の機胜です。むメヌゞをアセンブルするず、数分で新しいサヌバヌをコミッションする機䌚が埗られ、アセンブルされた各むメヌゞは曎新が倱敗した堎合のロヌルバックポむントずしお機胜したす。

もちろん、ここでは、ネットワヌク経由でブヌトする機胜を備えたinitrdにパッケヌゞ化された基本システムを取埗するために必芁な䞀般的な原則ず操䜜に぀いおのみ説明したす。 mdadm`a configや、新しいサヌバヌでディスクをパヌティション分割するなどの䜜業を簡単にする小さなスクリプトなど、さたざたな仕䞊げのオプションは読者の裁量に任されおいたす。



これが誰かに圹立぀こずを願っおいたす。 ご枅聎ありがずうございたした。 :)



All Articles