Debian GNU / Linuxワークステーションのネットワークインストール

こんにちは。



職場の自動展開は一般的なタスクです。 確かに多くの人々がそれを解決しました-ネットワークインフラストラクチャと個人の好みの当局の指示から始めて; 既製のソリューションを使用するか、独自のソリューションを作成します。



この記事では、Debian GNU / Linuxで動作するワークステーション用の自動ネットワークインストールシステムの構築方法をコミュニティと共有したいと思います。 フラッシュドライブ、ディスク、またはその他の外部ハードドライブはありません。何らかの理由で個人的には、非常に必要なゴミの読み取りやクリーンアップを行わずに、作業中の混乱の中で定期的に迷子になる習慣があります。



この状況が身近で親しみやすいように思える場合は、猫の下で歓迎します。



環境展開



ネットワークインストールを機能させるには、最初にDHCPサーバーとTFTPサーバーを構成する必要があります。 残念ながら、最初に成功した実験は1年半前、またはそれ以前に行われたため、それらを選択する際に何がガイドされたかを思い出せません。 当時、isc-dhcp-serverとtftpd-hpaがそれぞれdhcpとtftpサーバーとして選択されていました。



aptitude install isc-dhcp-server tftpd-hpa
      
      





dhcpサーバーの場合、/ etc / default / isc-dhcp-serverで使用されるインターフェイスを指定し、/ etc / dhcp / dhcpd.confでネットワークに適切な設定を行う必要があります。 ネットワーク192.168.121.0/24およびeth0インターフェイスの場合、次のようになります。



  sed -i 's/INTERFACES=""/INTERFACES="eth0"/g' /etc/default/isc-dhcp-server sed -i 's/#authoritative;/authoritative;/g' /etc/dhcp/dhcpd.conf echo -e ' subnet 192.168.121.0 netmask 255.255.255.0 { range 192.168.121.128 192.168.121.200; option domain-name-servers 192.168.121.1; option routers 192.168.121.1; filename "pxelinux.0"; }' >> /etc/dhcp/dhcpd.conf
      
      





言うまでもなく、他のオプションや設定がある場合もあります。 ここで関心のある唯一の行は最後から2番目の行で、作成されたシステムの初期ロードのためにネットワーク上でtftpdを使用して送信されるファイルの名前が示されます。



tftpdはデフォルト設定のままにしました。 / etc / default / tftpd-hpaファイルのTFTP_DIRECTORYパラメーターのみを変更しましたが、これは原則的には不要です。 次に、Debianネットワークインストールのイメージをこのディレクトリにダウンロードし、展開します



 wget http://ftp.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/netboot.tar.gz tar -xzvf netboot.tar.gz rm netboot.tar.gz
      
      





この段階では、すでにネットワーク経由でシステムをインストールできます(はい、すべてが非常に簡単です)が、これまでのところは手動モードのみです。 それは、ブート可能なフラッシュドライブ/コンパクトの検索に時間と神経を節約しますが、実際にはそうではないので、自動化の次の部分に進みます。インストーラーのすべての質問に対するいわゆる「応答ファイル」の作成です。



回答と質問



応答ファイルは、initrdに埋め込むことも、外部メディアに配置することも、インストールプロセス中に利用できるWebサーバーに配置することもできます。 最後のオプションは、変更を行う(initrdを再構築する必要がない)ためと、作業中に直接(答えのあるフラッシュドライブを探す必要がない)の両方で最も便利であることが判明しました。 このすべてを1台のコンピューターで回転させていますが、これは完全にオプションです。



インストーラーがすべての質問への回答を探す場所を「見つける」ために、$ TFTP_DIRECTORY / debian-installer / i386 / boot-screens / txt.cfgファイルで、autoおよびurlパラメーターを最後の行(appendで始まる)に追加します。 その結果、ファイルには次のようなものが含まれます。



 default install label install menu label ^Install menu default kernel debian-installer/i386/linux append vga=788 initrd=debian-installer/i386/initrd.gz -- quiet auto=true url=http://192.168.121.1/pxeinstall/preseed.cfg
      
      





必要に応じて、たとえば、メニュー構成でタイムアウト0をタイムアウト5に変更し、インストールを開始する前にEnterキーを押す手間を省くことができます。 個人的には、動揺して駆け寄った隣人が再起動するためにクラッシュしたマシンを送って煙を吐いた後、「永遠の」タイムアウトを返しました。彼が戻ったとき、お気に入りの「7」の代わりに新しくインストールされたDebianを見ました。 7番目のバージョンの新しくインストールされたシステムも彼を慰めなかったという私の勧め:(



もちろん、適切なホスト上で、pxeinstallディレクトリを備えたWebサーバーが必要です。 ここでは何も思いつきませんでした。Apacheはすでに内部のニーズに対応していました。 Webサーバーがまだない場合は、コマンド



  aptitude install apache2 && mkdir /var/www/pxeinstall
      
      





この問題を解決する必要があります。 それでは、答えを書いていきましょう。



公式のサンプルファイルはこちらでご覧いただけます 。 次のコマンドを実行して、システムの既製の応答ファイルを取得することもできます。



  debconf-get-selections --installer > my.preseed.cfg
      
      





そして



  debconf-get-selections >> my.preseed.cfg
      
      





追加のソフトウェアをインストールするときに与えたすべての回答をこのファイルに追加します。



確かに、どこかで取得したファイルが正しく機能しない可能性があるというステートメントに出会ったため、my.preseed.cfgをヒントとしてのみ使用して、元のファイルをニーズに合わせて修正することを推奨します。



一般に、このファイルの調査と編集は問題ではありません。すべてのコメントが適切です。 必要なパラメーターの必要な値は、debconfによって生成されたファイルにあります。 それでもなお、私がもっと詳しくお話ししたいニュアンスがいくつかあります。



ディスクのパーティション分割


この段階でディスクをパーティション分割するには、2つの方法があります-定義済みの自動パーティション分割オプションを選択するか、パーティションのサイズを手動で設定します。 3つの事前定義オプションがあります-1つのパーティション上のすべてのファイル。 / homeの下の個別のセクションと/ home、/ tmp、/ usrおよび/ varの下の個別のセクション。 応答ファイルに行として示されます



  di partman-auto/choose_recipe select atomic
      
      





アトミックの代わりに、それぞれhomeとmultiを使用できます。



実験として、また多くの典型的な内訳オプションではこれで十分ですが、マークアップを使用します。マークアップでは、従来、サービスニーズに個別のセクションが割り当てられているため、



  di partman-auto/expert_recipe string \ boot-root :: \ 30000 5000 40000 ext4 \ $primary{ } $bootable{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ / } \ . \ 20000 3000 40000 ext3 \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext3 } \ mountpoint{ /srv } \ . \ 10000 2000 10000000 ext4 \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ /home } \ . \ 50% 6000 200% linux-swap \ method{ swap } format{ } \ .
      
      





要するに、何が何だ。



boot-rootはある種の魔術であり、これなしではこのカヌーはすべて動作を拒否します:)その後、作成された各パーティションのパラメーターがあります。 1行目の3桁は、それぞれ最小パーティションサイズ、パーティション計算アルゴリズムの優先度、および最大パーティションサイズを示しています。 サイズはメガバイト単位で示され、破損すると、シリンダーのサイズに応じて切り捨てられます。 整数値に加えて、RAMサイズのパーセンテージを使用することもできます。 「2000 + 50%」タイプのバリアント、つまり2000MB + RAMの半分も許可されます。 優先順位は、条件付きの「天井の真ん中」の番号です。 値が小さいほど、最終的なセクションサイズは最小値に近くなります。 セクションの1つで最大サイズをより大きく指定することをお勧めしますが、オーバーフローが発生しないように1,000,000,000以下にしてください。i386では、整数演算は31ビットに制限されています。 残りの値は、もちろん、ファイルシステムのタイプです。



$ primary {}および$ bootable {}指定子は、作成されるパーティションがプライマリおよび/またはブート可能であることをそれぞれ示します。 セクションをフォーマットする場合は、{format}メソッドを指定する必要があります。 「フォーマット」に加えて、スワップパーティションの値「スワップ」と「キープ」を使用して、パーティションをそのまま保持することもできます。 メソッド{format}が指定されている場合は、もう1つのformat {}修飾子も指定する必要があります。 次のuse_filesystem {}およびfilesystem {ext4}修飾子は、パーティションがどのファイルシステムにフォーマットされるかを決定します。 使用される最後の修飾子mountpointは、作成されるパーティションのマウントポイントを定義します。 このシンボルは、セクションの説明を互いに区別するのに適しています。



これらのパラメーターはすべて1行で指定する必要があります。これにより、エラーの編集や検索がかなり楽しいタスクになります。したがって、従来はバックスラッシュを使用して、マークアップの保守性を多少維持します。



lvm、raid、その他の喜びを含む、ディスクレイアウトプロセスの詳細な説明は、 こちらこちらをご覧ください



機会の拡大


応答ファイルを使用すると、システムのインストールプロセスを完全に自動化できるという事実にもかかわらず、解決できないタスクが残っています。 これは、構成のさまざまな編集、およびユーザーが手元に置いておく必要のあるドキュメント/設定の標準セットです。もちろん、 シールはデスクトップ上の企業ロゴです。 この問題を解決するために、システムをインストールした後、/ targetがまだマウントされた状態でコマンドを実行する機会を利用します。



  di preseed/late_command string \ chroot /target sh -c "/usr/bin/wget -O /tmp/postinstall http://192.168.121.1/pxeinstall/postinstall && /bin/sh -x /tmp/postinstall"
      
      





つまり、準備されたスクリプトを取り出して実行するだけです。



ポストインストールファイルには特に目立ったものはありません。追加のソフトウェアを含むリポジトリが接続され、同じソフトウェアがインストールされます。 次に、構成ファイルが修正され、必要なすべての設定とともに参照ホームディレクトリがユーザーにロールアウトされます。



 #!/bin/bash deployserver=192.168.121.1 deployconfig=/pxeinstall/configs # # Installing additional software # wget $deployserver$deployconfig/apt_sources.list -O /etc/apt/sources.list export DEBIAN_FRONTEND=noninteractive aptitude update #Installing unzip with full cyryllic support apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EEBB18420019065 aptitude -y install unzip p7zip-full #opera has own repo wget -O - http://deb.opera.com/archive.key | apt-key add - aptitude update aptitude -y install opera #For skype we do the following aptitude install libasound2-plugins wget -O skype-install.deb http://www.skype.com/go/getskype-linux-deb dpkg -i skype-install.deb # wvdial cofig for intertelecom. Just in case. wget $deployserver$deployconfig/wvdial.conf -O /etc/wvdial.conf #Set adequate editor by default update-alternatives --set editor /usr/bin/vim.basic # # User profile # username=`cat /etc/passwd | grep 1000 | awk 'BEGIN { FS = ":" } ; { print $1 }'` cd /home/$username wget $deployserver$deployconfig/home.tar.gz # This archive is made by commands # cd home && tar -czvf ../home.tar.gz . # to include also hidden (config) files tar -xzvf home.tar.gz chown -R $username /home/$username rm home.tar.gz # # Additional system configs # wget $deployserver$deployconfig/10-service.rules -O /etc/udev/rules.d/10-service.rules wget $deployserver$deployconfig/service-blacklist.conf -O /etc/modprobe.d/service-blacklist.conf sed -i 's/#AutoLoginEnable=true/AutoLoginEnable=true/g' /etc/kde4/kdm/kdmrc sed -i 's/#AutoLoginAgain=true/AutoLoginAgain=true/g' /etc/kde4/kdm/kdmrc sed -i 's/#AutoLoginUser=fred/AutoLoginUser='$username'/g' /etc/kde4/kdm/kdmrc sed -i 's/"syntax on/syntax on/g' /etc/vim/vimrc exit 0
      
      







必要に応じて、preceed.cfgで通常はベースシステムのみを設定し、残りをこのスクリプトで実行できます。 このアプローチの利点は、インストーラー環境だけでなく、動作するdebianにワークプレースをインストールして設定する、別の既製のスクリプトがあることです。 または、既に存在している可能性があり、preseed.cfgで必要なキーを探す代わりに使用するのが良いでしょう。 この場合、postinstallは本格的なスクリプトのみをダウンロードします。この例は、今調べた例であり、インストール済みのシステムで既に再起動後に起動します。



個人的には、この特定の2段階アプローチのもう1つの理由は、インストーラー環境でのスクリプトの実行が非常に遅いことです。 たとえば、ローカルネットワーク上のリポジトリから約600 MBのパッケージをインストールし、さらにホームディレクトリのアーカイブを展開するには1日以上かかります。 スクリプトのこのような遅い実行の理由を見つけることができませんでした。再起動後、同じマシン上で数分で動作し、経験豊富な行商人の誰かがここで犬が暴走した場所を教えてくれれば非常にうれしいです。

ブートローダーの強制インストールの最後の行は、インストーラーが頑固にWindows 7がプリインストールされたブランドのコンピューターにgrubをインストールすることを望まなかった後に現れました。



 #!/bin/sh # Get firstboot script /usr/bin/wget -O /root/firstboot http://192.168.121.1/pxeinstall/firstboot chmod +x /root/firstboot # create a service that will run our firstboot script cat > /etc/init.d/firstboot <<EOF ### BEGIN INIT INFO # Provides: firstboot # Required-Start: $networking # Required-Stop: $networking # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: A script that runs once # Description: A script that runs once ### END INIT INFO cd /root /usr/bin/nohup sh -x /root/firstboot & EOF chmod +x /etc/init.d/firstboot update-rc.d firstboot defaults 99 grub-install --recheck --no-floppy /dev/sda
      
      







言うまでもなく、この場合、firstbootスクリプトでは、作業の完了後に自分自身を削除することを忘れてはなりません。

 update-rc.d firstboot remove
      
      





おわりに



ジョブを拡張する上記の方法により、OSインストールに関連するすべてのもの(スクリプト、構成、追加ファイル)を1か所に保持できるため、バックアップが簡素化され、システムイメージの正しいバージョンのUSBフラッシュドライブを検索する必要がなくなります。 まあ、この方法は、インストールスクリプトを簡単かつ迅速に変更できるほど柔軟です。



コメントを確認し、ご質問にお答えします。



All Articles