GNU/Linux >> Linux の 問題 >  >> Cent OS

Red Hat/CentOSでrpmを使用してシステム全体のカスタムスクリプトを統合する

目的

私たちの目標は、カスタムコンテンツを使用してrpmパッケージを構築し、バージョン管理、展開、展開解除など、さまざまなシステム間でスクリプトを統合することです。

オペレーティングシステムとソフトウェアのバージョン

  • オペレーティングシステム: Red Hat Enterprise Linux 7.5
  • ソフトウェア: rpm-ビルド4.11.3+

要件

インストールのためのシステムへの特権アクセス、ビルドのための通常のアクセス。

難易度

ミディアム

規約

  • –指定されたLinuxコマンドは、rootユーザーとして直接、または sudo を使用して、root権限で実行する必要があります。 コマンド
  • $ –通常の非特権ユーザーとして実行されるLinuxコマンドを指定

はじめに

Linuxシステムのコア機能の1つは、自動化のために構築されていることです。タスクを複数回実行する必要がある場合(次回の実行時にタスクの一部が変更された場合でも)、sysadminには、単純な shellからタスクを自動化するための無数のツールが用意されています。 スクリプトは、タスクが cron から実行される複雑なスクリプトシステムに対して、オンデマンドで手動で実行されます(したがって、タイプミスを排除するか、一部のキーボードヒットのみを保存します)。 指定された時間に、相互に対話し、別のスクリプトの結果を操作し、中央管理システムなどによって制御される場合があります。

この自由で豊富なツールセットは確かに生産性を向上させますが、欠点があります。システム管理者として、システム上で有用なスクリプトを作成します。これは別のシステムでも有用であることが証明されているため、スクリプトをコピーします。 3番目のシステムでもスクリプトは便利ですが、わずかな変更が加えられています。おそらく、そのシステムでのみ役立つ新機能であり、新しいパラメーターで到達可能です。一般化を念頭に置いて、スクリプトを拡張して新しい機能を提供し、スクリプトが作成されたタスクも完了します。これで、スクリプトの2つのバージョンができました。最初のバージョンは最初の2つのシステムにあり、2番目のバージョンは3番目のシステムにあります。

データセンターで実行されている1024台のコンピューターがあり、そのうち256台がそのスクリプトによって提供される機能の一部を必要とします。やがて、64のバージョンのスクリプトが作成され、すべてのバージョンがその役割を果たします。次のシステム展開では、あるバージョンでコーディングしたことを思い出す機能が必要ですが、どれですか?そして、それらはどのシステムにありますか?

Red HatフレーバーなどのRPMベースのシステムでは、システム管理者はパッケージマネージャーを利用して、他には提供されない可能性のある単純なシェルスクリプトなど、管理者が便利に作成したツールを含むカスタムコンテンツの順序を作成できます。

このチュートリアルでは、2つの bashを含むRedHatEnterpriseLinux7.5用のカスタムrpmを構築します。 スクリプト、 parselogs.sh およびpullnews.sh すべてのシステムがこれらのスクリプトの最新バージョンを/usr / local / sbinに配置する方法を提供します。 ディレクトリ、つまりシステムにログインするすべてのユーザーのパス上にあります。

ディストリビューション、メジャーバージョンとマイナーバージョン

一般に、ビルドマシンのマイナーバージョンとメジャーバージョンは、互換性を確保するために、パッケージがデプロイされるシステム、およびディストリビューションと同じである必要があります。特定のディストリビューションにさまざまなバージョンがある場合、または環境内に多くのバージョンがあるさまざまなディストリビューションがある場合(ああ、嬉しいです!)、それぞれにビルドマシンをセットアップする必要があります。作業を短くするために、各ディストリビューションと各メジャーバージョンのビルド環境をセットアップし、特定のメジャーバージョンの環境に存在する最も低いマイナーバージョンにそれらを配置することができます。当然のことながら、物理マシンである必要はなく、ビルド時に実行するだけでよいため、仮想マシンまたはコンテナを使用できます。

このチュートリアルでは、作業がはるかに簡単です。依存関係がまったくない2つのスクリプトのみをデプロイします( bash を除く)。 )、 noarchを作成します 「アーキテクチャに依存しない」を表すパッケージ。パッケージが構築されるディストリビューションも指定しません。このようにして、 rpmを使用するすべてのディストリビューションにインストールしてアップグレードできます。 、およびどのバージョンでも–ビルドマシンの rpm-buildを確認するだけで済みます パッケージは環境内で最も古いバージョンにあります。

建物環境の設定

カスタムrpmパッケージをビルドするには、 rpm-buildをインストールする必要があります パッケージ:

# yum install rpm-build

今後は使用しません root ユーザー、そして正当な理由があります。パッケージのビルドにはrootは必要ありません 特権があり、建築機械を壊したくない。

パッケージの最初のバージョンのビルド

構築に必要なディレクトリ構造を作成しましょう:

$ mkdir -p rpmbuild/SPECS

私たちのパッケージはadmin-scriptsバージョン1.0と呼ばれています。 specfileを作成します パッケージによって実行されるメタデータ、コンテンツ、およびタスクを指定します。これは、 viなどのお気に入りのテキストエディタで作成できるシンプルなテキストファイルです。 。以前にインストールされたrpmbuild vi を使用すると、パッケージは空のスペックファイルにテンプレートデータを入力します 空のものを作成しますが、このチュートリアルでは、 admin-scripts-1.0.specという以下の仕様を検討してください。 :

Name:           admin-scripts
Version:        1
Release:        0
Summary:        FooBar Inc. IT dept. admin scripts
Packager:       John Doe 
Group:          Application/Other
License:        GPL
URL:            www.foobar.com/admin-scripts
Source0:        %{name}-%{version}.tar.gz
BuildArch:      noarch

%description
Package installing latest version the admin scripts used by the IT dept.

%prep
%setup -q


%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/sbin
cp scripts/* $RPM_BUILD_ROOT/usr/local/sbin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%dir /usr/local/sbin
/usr/local/sbin/parselogs.sh
/usr/local/sbin/pullnews.sh

%doc

%changelog
* Wed Aug 1 2018 John Doe 
- release 1.0 - initial release

スペックファイルをrpmbuild/ SPECに配置します 以前に作成したディレクトリ。

specfileで参照されているソースが必要です –この場合、2つのシェルスクリプト。ソースのディレクトリを作成しましょう(メインバージョンに追加されたパッケージ名と呼ばれます):

$ mkdir -p rpmbuild/SOURCES/admin-scripts-1/scripts

そして、スクリプトをコピー/移動します:

$ ls rpmbuild/SOURCES/admin-scripts-1/scripts/
parselogs.sh  pullnews.sh

このチュートリアルはシェルスクリプトに関するものではないため、これらのスクリプトの内容は関係ありません。パッケージの新しいバージョンとpullnews.shを作成するので は、これから説明するスクリプトです。最初のバージョンのソースは次のとおりです。

#!/bin/bash
echo "news pulled"
exit 0

ソース内のファイルに適切な権限を追加することを忘れないでください。この場合、実行権限:

chmod +x rpmbuild/SOURCES/admin-scripts-1/scripts/*.sh


次に、 tar.gzを作成します 同じディレクトリ内のソースからのアーカイブ:

cd rpmbuild/SOURCES/ && tar -czf admin-scripts-1.tar.gz admin-scripts-1

パッケージをビルドする準備ができました:

rpmbuild --bb rpmbuild/SPECS/admin-scripts-1.0.spec

ビルドに関する出力が表示されます。問題が発生した場合は、エラーが表示されます(たとえば、ファイルやパスがありません)。すべてがうまくいけば、新しいパッケージは、デフォルトで rpmbuildの下に生成されたRPMSディレクトリに表示されます。 ディレクトリ(アーキテクチャごとにサブディレクトリに分類):

$ ls rpmbuild/RPMS/noarch/
admin-scripts-1-0.noarch.rpm

シンプルでありながら完全に機能するrpmパッケージを作成しました。以前に提供したすべてのメタデータをクエリできます:

$ rpm -qpi rpmbuild/RPMS/noarch/admin-scripts-1-0.noarch.rpm 
Name        : admin-scripts
Version     : 1
Release     : 0
Architecture: noarch
Install Date: (not installed)
Group       : Application/Other
Size        : 78
License     : GPL
Signature   : (none)
Source RPM  : admin-scripts-1-0.src.rpm
Build Date  : 2018. aug.  1., Wed, 13.27.34 CEST
Build Host  : build01.foobar.com
Relocations : (not relocatable)
Packager    : John Doe 
URL         : www.foobar.com/admin-scripts
Summary     : FooBar Inc. IT dept. admin scripts
Description :
Package installing latest version the admin scripts used by the IT dept.


そして、当然のことながら、( root を使用して)インストールできます。 特権):

rpmを使用したカスタムスクリプトのインストール

すべてのユーザーの$PATHにあるディレクトリにスクリプトをインストールしたため 、任意のディレクトリから、システム内の任意のユーザーとして実行できます:

$ pullnews.sh 
news pulled


パッケージはそのまま配布でき、任意の数のシステムで使用できるリポジトリにプッシュできます。そうすることはこのチュートリアルの範囲外ですが、パッケージの別のバージョンを構築することは確かにそうではありません。

パッケージの別のバージョンを作成する

私たちのパッケージとその中の非常に便利なスクリプトは、簡単な yum install admin-scripts でどこからでもアクセスできることを考えると、すぐに人気が出てきます。 環境内。間もなく、いくつかの改善を求める多くのリクエストがあります。この例では、 pullnews.shに対する多くの投票が幸せなユーザーから寄せられています。 実行時に別の行を印刷する必要がある場合、この機能は会社全体を節約します。別のスクリプトをインストールしたくないので、パッケージの別のバージョンをビルドする必要がありますが、組織のシステム管理者がすでにそのスクリプトに大きく依存しているため、同じ名前とパスを持つ新しいバージョンのパッケージを作成します。

まず、 pullnews.shのソースを変更します SOURCESでさらに複雑なものに:

#!/bin/bash
echo "news pulled"
echo "another line printed"
exit 0

新しいソースコンテンツでtar.gzを再作成する必要があります。バージョンを変更せず、リリースするだけなので、最初と同じファイル名を使用できます(したがって、 Source0 参照は引き続き有効です)。最初に前のアーカイブを削除することに注意してください:

cd rpmbuild/SOURCES/ && rm -f admin-scripts-1.tar.gz && tar -czf admin-scripts-1.tar.gz admin-scripts-1

次に、リリース番号の大きい別のスペックファイルを作成します:

cp rpmbuild/SPECS/admin-scripts-1.0.spec rpmbuild/SPECS/admin-scripts-1.1.spec

パッケージ自体はあまり変更されていないため、以下に示すように新しいバージョンを管理するだけです。

Name:           admin-scripts
Version:        1
Release:        1
Summary:        FooBar Inc. IT dept. admin scripts
Packager:       John Doe 
Group:          Application/Other
License:        GPL
URL:            www.foobar.com/admin-scripts
Source0:        %{name}-%{version}.tar.gz
BuildArch:      noarch

%description
Package installing latest version the admin scripts used by the IT dept.

%prep
%setup -q


%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/sbin
cp scripts/* $RPM_BUILD_ROOT/usr/local/sbin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%dir /usr/local/sbin
/usr/local/sbin/parselogs.sh
/usr/local/sbin/pullnews.sh

%doc

%changelog
* Wed Aug 22 2018 John Doe 
- release 1.1 - pullnews.sh v1.1 prints another line
* Wed Aug 1 2018 John Doe 
- release 1.0 - initial release

これで、更新されたスクリプトを含む別のバージョンのパッケージを作成できます。ビルドのソースとして、より高いバージョンのスペックファイルを参照していることに注意してください:

rpmbuild --bb rpmbuild/SPECS/admin-scripts-1.1.spec

ビルドが成功すると、RPMSディレクトリの下に2つのバージョンのパッケージが作成されます。

ls rpmbuild/RPMS/noarch/
admin-scripts-1-0.noarch.rpm  admin-scripts-1-1.noarch.rpm

これで、「高度な」スクリプトをインストールするか、すでにインストールされている場合はアップグレードできます。

rpmを使用したカスタムスクリプトのアップグレード

また、システム管理者は、このバージョンで機能リクエストが送信されたことを確認できます。

rpm -q --changelog admin-scripts
* Wed aug 22 2018 John Doe 
- release 1.1 - pullnews.sh v1.1 prints another line

* Wed aug 01 2018 John Doe 
- release 1.0 - initial release

結論

カスタムコンテンツをバージョン管理されたrpmパッケージにラップしました。これは、古いバージョンがシステム全体に散らばっていないことを意味します。インストールまたはアップグレードしたバージョンでは、すべてがその場所にあります。 RPMは、以前のバージョンでのみ必要だった古いものを置き換える機能を提供し、カスタムの依存関係を追加したり、他のパッケージが依存するいくつかのツールやサービスを提供したりできます。努力すれば、ほぼすべてのカスタムコンテンツをrpmパッケージにパックし、簡単にだけでなく一貫性を持って環境全体に配布できます。


Cent OS
  1. CentOS 6 /RHEL6のシングルユーザーモードでシステムをレスキューする

  2. CentOS/RHEL 7 で NetworkManager を使用してカスタム インターフェイス名を設定する方法

  3. CentOS/RHEL システムを LDAP/Kerberos/SSSD を使用して AD ドメインに統合する方法

  1. CentosでSysstatを使用してシステムを監視する方法

  2. Linux – Scientific Linux / red Hat / fedora / centosで独自のパスワードを使用してルートとしてプログラムを実行しますか?

  3. カスタム PGDATA を使用した Centos 7 上の Postgresql 9.3

  1. システムにインストールされているLinuxRedHat(RHEL)のバージョンを確認する方法

  2. YumまたはRPMを使用してCentOSにインストールされているパッケージを一覧表示する方法

  3. CentOS/RHEL で関連付けられたスナップショットを使用して LVM ファイル システムを拡張できない