25台のコンピューター上の学校の教室でチューニングを停止して生活を開始またはPuppetをセットアップする方法

コンピューターを一度に1つずつ構成できますが、コンピューターが多すぎる場合があります...







たまたま、1つの大企業が後援する、Android開発の学童向けの無料コースに教師を1人招きました。もちろん、25台のラップトップ、25台のタブレット、2台の固定コンピューター、およびタッチパネルの適切な機器を習得する必要がありました。 最近まで、ラップトップはWindows 8.1で使用されていましたが、EclipseおよびAndroid Studioで開発するとき、このOSのパフォーマンスと安定性に満足している人はほとんどいませんでした。 Windowsでの1年後、経営陣はこれらの問題を解決するためにすべてのラップトップをXubuntu 14.04に移行することにしました。 使用した特定のラップトップモデル用に構成され、必要なすべてのプログラムを備えたイメージが準備されました。 私はそれを転がして働きました。 1つの問題-構成の集中管理のためのソリューションは提供されませんでした。 これに関する私の論理的な質問に対して、そのようなシステムを導入するとラップトップにLinuxをインストールする手順が複雑になり、イメージにあるとおりにすべてが行われたため、インストール後に変更は必要ないという答えが得られました。 (ああ、これらの楽観主義者!)



一般的に、私は個人的に本当に集中管理された構成管理が必要であると判断し、自分で作業するように設定しました。 少し考えた後、Puppetは設定とインストールが簡単であると選択されました(シェフの指示がうまくいかなかっただけかもしれません-知りません)。 私にとって、この単純さは主要な基準でした。なぜなら、私はこの問題に多くの時間を割くことができなかったからです。



HabréはすでにPuppetについて多くのことを書いており、最初からインストールして構成する方法についての指示を含んでいます。 私は3個も見つけました。 ただし、1つ目は何らかの複雑すぎるケースについて説明し、2つ目は Puppetインストール自体よりもマニフェストファイルに焦点を当てています。 3番目は非常に優れており、情報源の1つとして使用しましたが、残念ながらすでに古くなっています。 そのため、セットアップと同時に、Habrに記事を投稿することにしました。 そして、私へのリマインダーと他の人への指示。



まだ多くのコンピューターがあり、各コンピューターで同じ手順を繰り返すことで苦しんでいるので、この出版物の最終結果は2つの単純なシェルスクリプトとその使用に関する短い指示になります。 1つはサーバーで、もう1つは各クライアントと出来上がりで起動します。 Puppetが調整され、動作する準備が整いました。 ここでいうサーバーとは、残りを操作するコンピューターを意味し、クライアントとは実際には同じ25台のラップトップを指します。



残念ながら、タブレット用の集中型構成管理システムを採用することも不可能です。 可能かもしれませんが、私は人生に遅れをとったばかりですか? Puppetがどのように構成されているかを特に理解したくないが、完成した結果を取得したい場合は、既製のスクリプトを投稿した記事の最後までスクロールできます。



Puppetセットアップ-プロセスの説明



1.最初に、教師のコンピューターにPuppet管理サーバーをインストールする必要があります。



sudo apt-get install -y puppetmaster
      
      





2.次に、クライアントにサービスをインストールします。



 sudo apt-get install -y puppet
      
      





3.クライアントが接続先を知るために、次の行を/etc/puppet/puppet.conf



追加します。



 [agent] server = mysuperserver node_name = cert certname = nameofworkstation
      
      





ここで、 mysuperserver



はサーバーのドメイン名に、 nameofworkstation



はこの特定のクライアントに割り当てることにした名前に置き換える必要があります。 組織でDNSが構成されていない場合は、サーバーを各クライアントの/etc/hosts



に追加できます。 これは重要です! Puppetが後で使用するSSL証明書は、サーバーのドメイン名専用に生成されます。 構成でIPを指定すると、次の手順でエラーが発生します。

4.次に、クライアントコンピューターでサービスのテスト実行を実行する必要があります。



 puppet agent --test
      
      





証明書がないため、クライアントは接続を拒否されますが、同時にサーバーで発行される証明書の要求を作成します。

5.適切なチームがこの要求を満たします。

puppet cert sign nameofworkstation







ここでは、 nameofworkstation



名の代わりに、ポイント3を完了するときに以前にクライアントに登録した名前があります。 証明書発行のために現在利用可能なすべてのサーバー要求のリストは、 puppet cert --list



で表示できます。

6.その後、クライアントでコマンドを再実行します。



 puppet agent --enable puppet agent --test
      
      





最初のコマンドは、初期化を再度有効にするために必要です。デフォルトでは、Puppetは1回しか実行できないためです。

この簡単な手順を実行すると、構成の更新を受信するように構成されたサーバーとクライアントが受信されます。



準備ができたスクリプトと手順



最後に、自宅で使用した2つの既製のスクリプトを紹介します。 サーバースクリプト:



 #!/bin/bash echo ============================================= echo   puppet echo ============================================= apt-get install -y puppetmaster echo ============================================= COMMAND=nope while [ "$COMMAND" != "end" ] do echo ============================================= echo   client.sh   .      ,  [ENTER] ,   .  Ctrl+C,    . echo ============================================= COMMAND=`read` echo ============================================= echo   echo ============================================= puppet cert sign --all done
      
      





クライアントスクリプト:



 #!/bin/bash #   2      MASTER_IP=192.168.0.100 SERVER_NAME=server echo ============================================= echo  ID  echo ============================================= sudo apt-get install -y uuid ID=`uuid` echo ============================================= echo    $SERVER_NAME  $MASTER_IP echo ============================================= echo $MASTER_IP $SERVER_NAME >> /etc/hosts echo ============================================= echo  puppet echo ============================================= sudo apt-get install -y puppet echo ============================================= echo      puppet echo ============================================= sudo cat >> /etc/puppet/puppet.conf << EOF [agent] server = $SERVER_NAME node_name = cert certname = workstation-$ID EOF echo ============================================= echo     echo ============================================= puppet agent --test echo ============================================= echo        [ENTER],        . echo ============================================= read -n 1 echo ============================================= echo   echo ============================================= puppet agent --enable puppet agent --test echo ============================================= echo  echo =============================================
      
      





それらの使用は非常に簡単です。

1.クライアントの環境に合わせてclient.sh



を変更します。サーバーのIPアドレス(静的にする必要があります)およびサーバー名(これはUbuntuのインストール中に指定したコンピューター名である必要があります)。 これらは、ファイルの先頭にある最初の2つの変数であり、修正する必要があります。

2.サーバーでserver.sh



起動され、次に各client.sh



クライアントで起動されます。 その後、サーバーでEnterキーを押して、サーバーがすべてのクライアント証明書に署名できるようにします。

3.次に、各クライアントでEnterキーを押して、既に有効な証明書を使用してサーバーに再接続し、使用可能なすべての構成を適用します。

4.サーバーでCtrl + Cを押して、プロセスを完了します。

この簡単な手順を実行すると、ラップトップは起動時と10分ごとにサーバーに自動的に接続し、使用可能な構成を確認します。 そして、もしあれば、それらを適用します。 美人!

注:私の意見では、クライアントスクリプトの大きなマイナス点は、それを再度実行すると、既に実行済みであっても構成が追加されることです。 したがって、ある段階でエラーが発生した場合、スクリプトを再実行するだけで原因を取り除いた後プロセスを続行するのは悪い考えです。 構成ファイルに混乱が生じます。 理想的には、構成ファイルの内容をチェックし、既に変更されている場合は変更を加えないように、スクリプトを作成する価値があります。 ただし、bashレベルが不十分であり、このレベルを改善する時間がないため、この欠点を克服できませんでした。 これが簡単かつ単純に誰かに与えられた場合、私はコメントで適切な修正を受け取ってうれしいです。



VNCをインストールする



さて、私たちはPuppetをセットアップしましたが、そのパンを少し活用してみてはいかがですか? 個人的には、学生のコンピューターでVNCアクセスを有効にして、希望する学生のコンピューターにいつでも接続して、彼がそこで何をしているのかを確認できるようにします。 そして、もし彼がすべての生徒に見せることができる何かをするなら、他の人が例を挙げるように、彼の画面の内容をインタラクティブなパネルに表示することが可能でしょう。 これら2つの目標を達成するために、最初に次のコマンドを使用してVNCパスワードを/etc/x11vnc.pass



ファイルに保存します(すべてがサーバーで実行されます)。



 sudo x11vnc -storepasswd 1 /etc/x11vnc.pass
      
      





なぜ、深刻なパスワードの代わりに、悲惨な小さなパスワードが必要なのですか? さて、Ubuntu 14.04リポジトリのパペットには、バイナリファイルをクライアントコンピューターにダウンロードすることを不可能にする2つのバグ( 最初2番目 )があります。 通常、有効なUTF-8エンコードテキストであるファイルのみを送信します。 パスワード-ハッシュは通常Puppetによってクライアントに配布されるという事実を確認しました。 パスワードを検索することもできます。パスワードのハッシュは有効なUTF-8テキストです。 私はクラスでそれを拾いました。 あなたも試してみてください。



それでは、サーバーの/etc/puppet/manifests/



site.pp



ファイルsite.pp



次の内容でsite.pp



ます。



 package { "mc": ensure => installed, } package { "x11vnc": ensure => installed, } file { "/etc/x11vnc.pass": content => file("/etc/x11vnc.pass"), mode => 600, } $str = "start on login-session-start script /usr/bin/x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -bg -o /var/log/x11vnc.log end script " file { "/etc/init/x11vnc.conf": content => "$str", mode => 644, }
      
      





ここではすべてが明らかです。 このマニフェストはmc



およびx11vnc



インストールし、ログイン画面が表示されたときに指定されたパスワードでVNCを自動的に開始するサービスを作成することを簡単に言ってx11vnc



。 (設定でこの回答を使用しました) /etc/puppet/manifests/site.pp



という名前を選択するのは私の気まぐれで/etc/puppet/manifests/site.pp



ないことに注意してください。 これは、Puppetがデフォルトのマニフェストを保存するパスです。 繰り返しになりますが、自分で作ったマニフェストに対する建設的な批判はうれしいです(建設的な批判のためにHabrが大好きです)。



以上です。 その結果、起動するたびに10分ごと(Puppetのデフォルト値)、クライアントはサーバーに接続し、構成が更新されているかどうかを確認し、更新されている場合は更新を適用します。

ご清聴ありがとうございました。



All Articles