クリスマスの宇宙遊泳

こんにちは、Habr!



クリスマスの少し前に、IT部門でSpacewalkを研究することが決定されました。これは、一元化された構成管理、システム更新、およびサーバーパーク全体の便利なサポートのための、Satelliteの無料アナログであるRed Hatシステムです。



公式Webサイトで入手できるドキュメントでは、さまざまな種類のトラブルシューティングの追加コメントが不足しているため、タスクは最初にテストサーバーに、次に製品に段階的に導入するために製品を調査することでした。



Spacewalkを導入する主なアイデアは、制御の集中化と単純化だけでなく、先例がすでに発生しているため、誰も新しいプロジェクトのサーバーの更新を遊び心のあるペンで再生しないようにすることでした。



2週間の仕事の後、私が受け取ったすべての知識はConfluenceの内部アナログに入力され、休日の休みでHabrに関する記事を書くようになりました。



始める前に、Spacewalkを操作するための完全なマニュアルのふりをしないように、影響を受けたものと受けなかったものを簡単に強調したいと思います。



+サーバー/クライアントのインストールと構成

+ GUIでのシステムセットアップ

+インストール/パッケージの更新のトラブルシューティング、構成の操作

+正誤表(重要な更新、脆弱性などに関する情報の収集)



-プロキシ(HAの拒否後に消滅する必要があります)

-コブラー/キックスタート

-OpenSCAP



システム要件



インフラストラクチャ全体がVMWare上で実行されるという事実により、作業はCentOS 7を実行するVM上で実行されました。開発者からの推奨システム要件は次のとおりです。





私が使用した:





また、SELinuxを無効にし、使用しない場合はfirewalldを無効にすることをお勧めします。 または、httpサービスを例外に追加します。



注:記事の最後に、クライアントとサーバーの両方の部分、およびbashスクリプトのAnsibleのプレイブックがあります。 彼らの助けを借りて、インフラストラクチャ全体を数分で展開できます。



設置



インストール自体は公式ドキュメントといくつかのサイトの両方で説明されていますが、記事の整合性のために、ここでこの点について言及します。



Spacewalkは、PostgreSQLとOracle RDBMSの2つのDBMSで動作します。 私は最初の経験があり、今すぐ使用します。



2つのインストールオプションがあります。スペースウォークの自動インストーラー(どちらも同じサーバーに自身とデータベースをインストールおよび構成します)と、DBとアプリケーションを異なるサーバーに配置できる手動インストールの両方です。 両方のオプションを検討し、個別のインストールから始めます。



PostgreSQL



yum install -y postgresql-server
      
      





PGのPL / Tclモジュールを接続することも必要です。



 yum install -y postgresql-pltcl postgresql-setup initdb systemctl start postgresql
      
      





データベースとユーザーを作成し、モジュールを接続します。



 su - postgres -c 'PGPASSWORD=verystrong; createdb spcwlkdb ; createlang plpgsql spcwlkdb ; createlang pltclu spcwlkdb ; yes $PGPASSWORD | createuser -P -sDR spcwlkuser'
      
      





接続の問題を回避するには、 /var/lib/pgsql/data/pg_hba.confを変更して、すべての行の前に次の行を追加する必要があります。



 local spcwlkdb spcwlkuser md5 host spcwlkdb spcwlkuser 127.0.0.1/8 md5 local spcwlkdb postgres ident
      
      





すべてを再起動します。



 systemctl restart postgresql
      
      





アプリケーションとデータベースを異なるサーバーにインストールする場合は、 postgresql-contribパッケージがデータベースサーバーにインストールされていることを確認してください。



宇宙遊泳



リポジトリを接続します:



 rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8/epel-7-x86_64/00736372-spacewalk-repo/spacewalk-repo-2.8-11.el7.centos.noarch.rpm
      
      





また、epelを接続します。



 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      
      





Java:



 (cd /etc/yum.repos.d && curl -O https://copr.fedorainfracloud.org/coprs/g/spacewalkproject/java-packages/repo/epel-7/group_spacewalkproject-java-packages-epel-7.repo)
      
      





Spacewalk-postgresのインストーラーを直接:



 yum -y install spacewalk-setup-postgresql
      
      





データベースに接続します。



 spacewalk-setup-postgresql create --db spcwlkdb --user spcwlkuser --password verystrong
      
      





別のデータベース/アプリケーションメソッドを使用している場合は、 -standaloneフラグを追加し、データベースサーバーのIPアドレスを指定する必要があります。ポート5432を開くことも忘れないでください。



注:システム全体の生産性を高めるために、ハードウェアに応じてデータベースを調整することをお勧めします。



次に、Spacewalk自体をインストールし、インストールを実行します。



 yum -y install spacewalk-postgresql spacewalk-setup --external-postgresql
      
      





次に、SSL証明書とデータベースの両方について、いくつか質問があります。 すべての値を手動で入力するか、 -answer-fileフラグを使用して、将来のインストールを自動化するために回答のあるファイルへのパスを指定できます。



 admin-email = root@localhost ssl-set-cnames = spcwlkserver ssl-set-org = Unicorn ssl-set-org-unit = EOH ssl-set-city = Prague ssl-set-state = HMP ssl-set-country = CZ ssl-password = verystrong ssl-set-email = root@localhost ssl-config-sslvhost = Y db-backend=postgresql db-name=spcwlkdb db-user=spcwlkuser db-password=verystrong db-host=localhost db-port=5432 enable-tftp=Y
      
      





アプリケーションを直接制御するには、以下を使用する価値があります。



 /usr/sbin/spacewalk-service [stop|start|restart]
      
      





アプリケーションに寄与するすべてのサードパーティサービスを表示するには:



 spacewalk-service status
      
      





オプション2、自動インストール



リポジトリを接続したら、次を設定して実行します。



 yum -y install spacewalk-setup-postgresql yum -y install spacewalk-postgresql spacewalk-setup
      
      





繰り返しますが、データベースとSSLに関する質問があります。--answer-fileキーと、回答のあるファイルへのパスを使用します。



ベースおよび子チャンネル、リポジトリ



クライアントステーションを管理するために、Spacewalkはいわゆるチャネルのシステムを使用します。これはメイン(子)または子(子)のいずれかで、必要なリポジトリは各チャネルに接続され、キーはクライアントとペアになりますサーバー。



その結果、リポジトリはチャネルと同期され、チャネルはクライアントと接続され、Spacewalkは一般的な方法で動作します。 チャンネルに結び付けることができるエラータも言及する価値があり、更新とパッケージ制御を簡素化します。



すべてのクライアントは、同じチャネルでも、異なるチャネルまたはリポジトリでも、さまざまな基準に従ってグループ化することができます。一度に多数のクライアントと連携することができ、100以上のサーバーで更新を行うことができます。



すべてのインストール済みパッケージのリストが利用可能であり、リポジトリの同期後、インストールが可能です。 一部のポイントは直感的であり、各アイテムを行ごとに検討しても意味がありません。



Spacewalkのすべてのアクションはスケジュール(スケジュール)で実行されます。ほとんどすべてのアクションは、最も都合の良い時間に設定できます。



インストール後、サーバーのアドレスに移動し、グラフィカルインターフェイスを介してさらに設定を実行できます。







パスワード、管理者名、組織名(クライアントを管理する方法の1つでもあります)を入力し、スタートパネルに移動します。



今のところ、利用可能なオプションを自分で調べるか、チャンネルの作成に進むことができます。



チャネル-ソフトウェアチャネルの管理-チャネルの作成:







CentOS_7_x86_64など、このチャネルにバインドされるOSのタイプとタイプに従ってチャネル名を設定することをお勧めします。チェックとしてsha256を安全に選択できます。ChannellSummaryフィールドはチャネルの簡単な説明用です。 また、オプションで追加情報を提供できます。



次に、子チャネルを作成して、メインチャネルにバインドします。 メインチャンネルを作成するのと同じ方法で、親チャンネルフィールドでのみ、以前に作成されたチャンネルを示します。



リポジトリをメインおよびサブチャネルにバインドします。

チャンネル-リポジトリの管理







メインチャネルについては、ベースリソースを使用し、サブチャネルについては更新を使用します。



リポジトリを作成したら、それらをチャネルに接続する必要があります。

チャンネル-ソフトウェアチャンネルの管理 、メインチャンネルを開き、リポジトリセクションを開きます。







作成されたすべてのリポジトリがあり、必要なリポジトリを選択してマークし、[リソースの更新]をクリックします。



次に、同期サブキーを開きます。







リポジトリとチャネルを同期できる場所で、同期のスケジュールを構成します。



注:遊び心のあるペンの場合、クライアントシステムから標準リポジトリを削除する必要がありました。



クライアントのインストール、クライアントとサーバーのペアリング、キー管理、構成チャネルのセットアップ



前述したように、SpacewalkはRed Hat Networkのキーシステムを使用します。これは、ペアリングと管理に使用されます。



キーを作成するには、[ システム]-[アクティベーションキー]-[キーの作成]に移動します。







ここではすべてが非常に簡単です。自分でキーを設定でき、その形式は常に1-XXXXXXであり、各キーはチャネルにアタッチされていることを言及する価値があります。 Universal Defaultフラグは、新しいシステムにキーパラメーターを強制的に選択させます。



クライアントのインストール



クライアントリポジトリを接続し、必要なパッケージをインストールします。



 rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8-client/epel-7-x86_64/00742644-spacewalk-repo/spacewalk-client-repo-2.8-11.el7.centos.noarch.rpm yum -y install rhn-client-tools rhn-check rhn-setup rhnsd m2crypto yum-rhn-plugin rhncfg-actions deltarpm
      
      







注:rhncfg-actionsとdeltarpmは、構成とリモートコントロールが正しく機能するために必要です。



Spacewalkはrhn_checkを使用して、4時間ごとに実行されるクライアントサーバーを同期します。 この値は最大60分まで短縮できますが、私にとって最適なオプションはありませんでした。そのため、Spacewalkに付属するosadを使用するか、rhn_checkにcronjobを追加するなど、1分ごとにシステムをテストしてから、必要に応じて値を変更できます。



 crontab -e * * * * * /usr/sbin/rhn_check
      
      





また、/ usr / bin / rhn-actions-control --enable-allをCronに追加することも不必要ではなく、構成の展開に使用され、場合によっては鈍くなることがあります。



キー管理に戻り、作成したキーIDをコピーして実行します。



 rhnreg_ks --serverUrl=http://your-server-ip/XMLRPC --activationkey=1-YOURKEY --force
      
      





IPとキーの値を自分のものに変更することを忘れないでください。 繰り返しますが、このフラグを使用せずに問題に気づいたため、 -forceフラグを使用することをお勧めします。



システムに戻ります-すべて 、システムに注目します。 これを開いて、何をどのように探索することができますが、今のところは、システム管理をより便利にするグループを作成することを強くお勧めします。



Systems-System Goups-Create Group 、名前と説明を入力し、保存し、新しく作成したグループを開き、 Systemsセクションに移動してシステムをグループに追加します。



システムをチャンネルにサブスクライブします。Systems-Your system-Software folder-Software Channelsサブフォルダー:







チャンネルを選択して、確認をクリックします。 楽しみのために、パッケージSoftware-Packages-Installをインストールしてみてください。



設定チャンネル



クライアントサーバー/ローカルマシン間の構成、およびリモートコントロールを管理するには、構成チャネルを設定し、システムをそれにリンクする価値があります。

構成-構成チャネル-構成チャネルの作成 、名前、説明の設定、保存に進み、 構成-構成チャネルの管理-チャネルのサブスクライブを行い、構成チャネルにソフトウェアチャネルとシステムに署名します。







これで、サーバーとローカルマシンの両方から構成を展開し、パーティションを作成できます。



設定-ファイルの追加-ファイルの作成/ファイルのアップロード:







また、bashスクリプトの形式でリモートコマンドを送信できます。







すべてのアクションはスケジュールを通過することを思い出してください。このシステムに適用されるすべてのアクションのリストは、イベントセクションにあります。







正誤表



Spacewalkの最も重要な機能の1つはエラータサポートです。これは、チャネルに簡単にバインドし、最近の更新の重要度を監視できるようにします。 これは、スクリプトに加えて、サーバー上で直接構成されます。Pearlに必要なパッケージをダウンロードする必要があります。



 yum -y install perl-Frontier-RPC perl-Text-Unidecode wget https://raw.githubusercontent.com/stevemeier/cefs/master/errata-import.pl chmod +x errata-import.pl
      
      





次に、メインの更新およびコレクションスクリプトのエラッタを作成します。これは/ etc / rhn /に保存されます



 #!/bin/bash cd /etc/rhn/ wget -N http://cefs.steve-meier.de/errata.latest.xml wget -N https://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml export SPACEWALK_USER='root' export SPACEWALK_PASS='verystrong' ./errata-import.pl --server YourServerIPAddress --errata errata.latest.xml --rhsa-oval com.redhat.rhsa-all.xml --publish unset SPACEWALK_USER unset SPACEWALK_PASS
      
      





エクスポートで、最初に指定したSpacewalk管理者の名前とパスワードを指定します。



スクリプトを実行可能にして、Cronに追加しましょう。



 chmod +x spcwlk_errata.sh crontab -e 0 2 * * 7 /usr/bin/sh /etc/rhn/spcwlk_errata.sh
      
      





今すぐ実行して、グラフィックインターフェイスの変更を確認しましょう。 実行には時間がかかります。







まとめ



私が個人的に見逃した重要な点は、プロキシをセットアップしてインストールすること、およびシステム全体をHAとして上げることです。 ペースメーカーを介してアプリケーションを構成し、データベースで同期することを考えていました。 その結果、クライアントステーションのサーバー群がそれほど大きくないことを考慮して、このアイデアを放棄することが決定されました。 ただし、システムが今後6か月で非常に有用であることが判明した場合は、元のサーバーを拡張する必要があります。



自動化



サーバー:



サーバー展開用のBashスクリプト(firewalldを無効にする):


 #!/bin/sh # rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8/epel-7-x86_64/00736372-spacewalk-repo/spacewalk-repo-2.8-11.el7.centos.noarch.rpm rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm (cd /etc/yum.repos.d && curl -O https://copr.fedorainfracloud.org/coprs/g/spacewalkproject/java-packages/repo/epel-7/group_spacewalkproject-java-packages-epel-7.repo) yum -y install spacewalk-setup-postgresql spacewalk-postgresql wget perl-Frontier-RPC perl-Text-Unidecode perl-XML-Simple # mkdir /usr/share/spcwlk-tmp/ echo 'admin-email = root@localhost ssl-set-cnames = spcwlkserver ssl-set-org = Unicorn ssl-set-org-unit = EOH ssl-set-city = Prague ssl-set-state = SCK ssl-set-country = CZ ssl-password = verystrong ssl-set-email = root@localhost ssl-config-sslvhost = Y db-backend=postgresql db-name=spcwlkdb db-user=spcwlkuser db-password=verystrong db-host=localhost db-port=5432 enable-tftp=Y' > /usr/share/spcwlk-tmp/spcwlk_answer spacewalk-setup --answer-file=/usr/share/spcwlk-tmp/spcwlk_answer # systemctl stop firewalld systemctl disable firewalld #
      
      







エラータをインストールするためのBashスクリプト(最初にSpacewalk管理者の名前とパスワードを設定):
 #!/bin/sh # wget https://raw.githubusercontent.com/stevemeier/cefs/master/errata-import.pl -P /etc/rhn/ echo '#!/bin/bash cd /etc/rhn/ wget -N http://cefs.steve-meier.de/errata.latest.xml wget -N https://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml export SPACEWALK_USER='gui username' export SPACEWALK_PASS='Password to your gui account' ./errata-import.pl --server YourServerIPAddress --errata errata.latest.xml --rhsa-oval com.redhat.rhsa-all.xml --publish unset SPACEWALK_USER unset SPACEWALK_PASS' > /etc/rhn/spcwlk_errata.sh # chmod +x /etc/rhn/errata-import.pl chmod +x /etc/rhn/spcwlk_errata.sh # echo '#!/bin/bash # /etc/rhn/./spcwlk_errata.sh' > /etc/rhn/spcwlk_errata_cron.sh chmod +x /etc/rhn/spcwlk_errata_cron.sh echo '0 2 * * 7 /usr/bin/sh /etc/rhn/spcwlk_errata_cron.sh' >> /var/spool/cron/root /etc/rhn/./spcwlk_errata.sh #
      
      







サーバー展開のためのAnsibleプレイブック(応答ファイルの追加を忘れないでください):
 - hosts: spcwlk-server tasks: - name: Install Spacewalk repo yum: name: https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8/epel-7-x86_64/00736372-spacewalk-repo/spacewalk-repo-2.8-11.el7.centos.noarch.rpm state: present - name: Install epel repo yum: name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm state: present - name: Install PostgreSQL packages yum: name: - spacewalk-setup-postgresql - spacewalk-postgresql - wget - perl-Frontier-RPC - perl-Text-Unidecode - perl-XML-Simple - name: Creates directory for Spacewalk answer file file: path: /usr/share/spcwlk-tmp/ state: directory mode: 0755 - name: Deploy answer file copy: src: /etc/ansible/spcwlk_answer dest: /usr/share/spcwlk-tmp/spcwlk_answer - name: Spacewalk Server Deploy shell: spacewalk-setup --answer-file=/usr/share/spcwlk-tmp/spcwlk_answer - name: Stop firewalld systemd: name: firewalld state: stopped enabled: no
      
      







顧客:



クライアント展開用のBashスクリプト(IPとキーを忘れないでください):
 #!/bin/sh # rpm -Uvh https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8-client/epel-7-x86_64/00742644-spacewalk-repo/spacewalk-client-repo-2.8-11.el7.centos.noarch.rpm yum -y install rhn-client-tools rhn-check rhn-setup rhnsd m2crypto yum-rhn-plugin rhncfg-actions deltarpm wget echo '#!/bin/bash # /usr/sbin/rhn_check' > rhn_check.sh mv rhn_check.sh /etc/cron.hourly/ chmod +x /etc/cron.hourly/rhn_check.sh echo '* * * * * /usr/bin/sh /etc/cron.hourly/rhn_check.sh' >> /var/spool/cron/root /usr/bin/rhn-actions-control --enable-all cd /usr/share/rhn/ wget http://YourServerIPAddress/pub/RHN-ORG-TRUSTED-SSL-CERT rhnreg_ks --serverUrl=http://172.22.64.41/XMLRPC --activationkey=1-xxxxxxxxxxxxxxxxxxxxxxxxxxxx --force
      
      







クライアント展開のためのAnisbleプレイブック:
 - hosts: spcwlk-clients tasks: - name: Install spacewalk repo yum: name: https://copr-be.cloud.fedoraproject.org/results/@spacewalkproject/spacewalk-2.8-client/epel-7-x86_64/00742644-spacewalk-repo/spacewalk-client-repo-2.8-11.el7.centos.noarch.rpm state: present - name: Install client packages yum: name: - rhn-client-tools - rhn-check - rhn-setup - rhnsd - m2crypto - yum-rhn-plugin - rhncfg-actions - deltarpm - wget - name: Create cronjob for rhn_check cron: name: "rhn_check" minute: "*" hour: "*" day: "*" month: "*" weekday: "*" job: "/usr/sbin/rhn_check" - name: Enable controls for config and remote control deployment shell: /usr/bin/rhn-actions-control --enable-all - name: Get certificate from server to client get_url: url: http://YourServerIPAddress/pub/RHN-ORG-TRUSTED-SSL-CERT dest: /usr/share/rhn/ - name: Register client to server rhn_register: state: present server_url: http://YourServerIPAddress/XMLRPC activationkey: "{{ activation_key }}"
      
      







記事を読んでくれてありがとう。 頑張って



All Articles