目的
私たちの目標は、カスタムコンテンツを使用して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
を使用して)インストールできます。 特権):
すべてのユーザーの$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 DoeGroup: 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パッケージにパックし、簡単にだけでなく一貫性を持って環境全体に配布できます。