まえがき
したがって、本当に必要なプログラムのソースコードと、それを展開する必要のあるSolaris用のサーバーがいくつかあります。 さらに、コンパイルを成功させるには、多数のPerlモジュールが必要です。
少し前まで、私はそのような問題に直面していました、そして、長い試みの後、私は見つけられた解決策を共有せざるを得ません。
タスク:SPARC Solarisでmunin-nodeクライアントのソースコードを収集し、複数のサーバーに配布します。
プロセス全体を、例としてSolaris 10 SPARCオペレーティングシステムを使用して説明します(更新、特別な役割を果たしていないようです。U6とU9の両方がありました)および無料のmuninアプリケーション(http://munin-monitoring.org/)。
準備する
パッケージをビルドするには、次のものが必要です。
- クリーンなOSでサーバーをテストします。
- 目的のアプリケーションのソースコード。 ここから、munin-node 1.44(執筆時点ではバージョン1.45が既に利用可能でした)を取得します: sourceforge.net/projects/munin/files/munin%20stable/1.4.4/munin-1.4.4.tar.gz /ダウンロード
- テストサーバーからインターネットへのアクセス。 または、ネットワーク上のCPANミラー。 2番目のオプションがありました。
- 必要なPerlモジュールのリスト。
最後の段落に問題があるかもしれないことを完全に認めます。 通常、開発者はどのモジュールが必要かを明示的に示します。 全体的な問題は、開発者が必要なモジュールの依存関係を示す可能性が低いことです。
組立
まず、Perlモジュールをインストールする必要があります。 一部には、Perlモジュールを含むパッケージの正常なアセンブリのために、上記のようにクリーンな軸を持つテストサーバーが必要であることが示されました。 実際、すべてのモジュールは1か所に保存されています。 通常、これは/ usr / perl5 / site_perl / <version> /です。 プログラム用のモジュールをインストールするとき、/ usr / local / perl5 / <version> /などのこのフォルダーは空にすることをお勧めします。 これにより、モジュールをパッケージに統合するプロセスが容易になります。
注: <バージョン >によって-これは、サーバー上のPerlの作業バージョンを意味します。
最も簡単な方法は、CPANを使用してインストールすることです。
# perl -MCPAN -e shell
cpan> install Module::Name
目的のモジュールがインストールされ、すべての依存関係が引き上げられます。 ネットワークにはCPANに関する十分な情報があるため、モジュールのインストールにかかる時間はスキップします。 CPANミラーを個別にダウンロードするよりも、家のどこかに展開する方がはるかに効率的であることに注意してください。 さらに、ミラーは非常に迅速に構成され、現在の合計ボリュームは2GBを超えません! 手動インストールでは、依存モジュールの検索が非常に長く不快になります。
すべてのモジュールがインストールされたら、次を実行します。
# find /usr/perl5/site_perl/5.8.8/ > /tmp/perl_files
後でファイル/ tmp / perl_filesに戻ります。
次にソースコードについて説明します。
ほとんどのソースでは、コンパイル時にビルドするパスを指定できます。 つまり、コンパイルされたすべてのファイルがどのディレクトリに配置されているかを明示的に示すことができます。
目的のディレクトリ(/ pkg)でソースコードをコンパイルします。
# make DESTDIR=/pkg # make install-common-prime DESTDIR=/pkg # make install-node DESTDIR=/pkg # make install-plugins-prime DESTDIR=/pkg
munin-nodeプログラムのソースコードがコンパイルされ、インストールされました。
これがなぜ行われるのか、少し説明しましょう。 通常のコンパイル中に、DESTDIRを指定せずに、プログラムはMakefile.configに登録されているディレクトリにインストールされます。 この場合、どのディレクトリにどのファイルがインストールされたかに関するすべての情報をまとめることは困難です。
次に、プログラム内のすべてのファイルのリストを作成する必要があります。
# find /pkg -print > /tmp/files
この場合、findコマンドは/ pkgの内容をリストし、コマンドの出力は/ tmp / filesファイルに移動します。
その後、/ tmp / filesファイルを編集して、すべてのパスから/ pkgディレクトリを削除する必要があります。
これで、DESTDIRを指定せずに、期待どおりにプログラムをインストールできます。
前に、findコマンドを使用してファイル/ tmp / perl_filesを作成しました。 このファイルの内容は/ tmp / filesに配置する必要があり、ファイルを表示して重複する行を削除する必要があります。 行を繰り返さないでください!
パッケージの作成を開始できます。 まず、パッケージの「コンテンツ」を作成します。
# cat /tmp/files | pkgproto > /tmp/Prototype
このコマンドは、次のようなファイル/ tmp / Prototypeを作成します。
d none /opt 0755 root root d none /opt/munin 0755 root root d none /opt/munin/man 0755 root root d none /opt/munin/man/man3 0755 root root f none /opt/munin/man/man3/Munin::Common::TLSClient.3 0555 root root f none /opt/munin/man/man3/Munin::Common::TLS.3 0555 root root f none /opt/munin/man/man3/Munin::Common::Config.3 0555 root root f none /opt/munin/man/man3/Munin::Common::Timeout.3 0555 root root f none /opt/munin/man/man3/Munin::Common::Defaults.3 0555 root root f none /opt/munin/man/man3/Munin::Common::TLSServer.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Config.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Server.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Service.3 0555 root root f none /opt/munin/man/man3/Munin::Node::OS.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Configure::HostEnumeration.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Configure::PluginList.3 0555 root root f none /opt/munin/man/man3/Munin::Node::SNMPConfig.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Session.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Logger.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Configure::Debug.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Utils.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Configure::Plugin.3 0555 root root f none /opt/munin/man/man3/Munin::Node::Configure::History.3 0555 root root f none /opt/munin/man/man3/Munin::Plugin::Pgsql.3 0555 root root f none /opt/munin/man/man3/Munin::Plugin::SNMP.3 0555 root root f none /opt/munin/man/man3/Munin::Plugin.3 0555 root root d none /opt/munin/man/man1 0755 root rootf none /opt/munin/man/man1/munin-node.1 0555 root root f none /opt/munin/man/man1/munin-run.1 0555 root rootf none /opt/munin/man/man1/munindoc.1 0555 root root f none /opt/munin/man/man1/munin-node-configure.1 0555 root rootd none /opt/munin/bin 0755 root root f none /opt/munin/bin/munindoc 0555 root rootd none /opt/munin/sbin 0755 root rootf none /opt/munin/sbin/munin-run 0555 root root f none /opt/munin/sbin/munin-node-configure 0555 root rootf none /opt/munin/sbin/munin-node 0555 root root
必要に応じて、各ファイルのアクセスレベルを編集できます。
このファイルの最初に、パッケージに関する情報を保存するpkginfoファイルへのポインターを追加する必要があります。 必要に応じて、checkinstall、preinstall、postpostへのポインターを追加することもできます。 短い説明:
- checkinstallは、インストール前の検証に使用されます。 誰にも代わって実行されます。 このスクリプトは、ディレクトリの依存関係または権限を確認できます。 条件が不十分な場合、スクリプトはpkgaddユーティリティを終了します。
- preinstallは 、パッケージのインストール中にルートから起動されます。 たとえば、このスクリプトを使用すると、インストールするパッケージのユーザーを作成できます。 実行を中断した場合、pkgrmを実行して、失敗したパッケージのインストールを削除する必要があります。
- postinstallは 、パッケージの大部分がインストールされた後に起動されます。 たとえば、このスクリプトを使用すると、SMFサービスを作成したり、エンドユーザーに情報を表示したりできます。 多くのオプション。
この場合、これらのファイルはすべて/ tmpにある必要があります。
Pkginfoは、次のようになります。
PKG="Munin-node" NAME="Munin-node 1.44" VERSION="1.44" ARCH="sparc" CLASSES="none" CATEGORY="application" VENDOR="GNU" PSTAMP="Creator Name" EMAIL="Creator.Name@mail" BASEDIR="/"
pkginfo、checkinstall、preinstall、postinstallを追加するための構文は次のとおりです。
i pkginfo i checkinstall i preinstall i postinstall
だから。 設定ファイルの準備ができました。 パッケージの作成を開始できます。
# pkgmk -o -r / -d /tmp -f Prototype
パッケージを作成し、以前のすべての試行を上書きし(-o)、ルートディレクトリとして/を使用して(-r)、プロトタイプ(-f)ファイルのリストを使用して/ tmpにパッケージをコンパイルします。
これで/ tmpに、まだパッケージ化されていないコンパイル済みパッケージのディレクトリが見つかります。 このディレクトリは、pkginfoファイルのPKG行として名前が付けられます。 Prototypeに追加された場合、すべてのスクリプトはインストールディレクトリにあります。 プログラムファイルはルートディレクトリにあります。 パッケージのインストールをデバッグするプロセスで、ファイルの内容を安全に編集できます。 ただし、チェックサムとファイルサイズが変更される可能性があり、これらの変更がpkgmapファイルに反映される必要があることに留意する必要があります。そうしないと、インストールは失敗します。 pkgadd -dの起動時に、インストーラーがサイズと量の不一致を示し、確実に正しい値を書き込むのは素晴らしいことです。
本当のささいなまま:
# cd /tmp # tar -cf - Munin-node | gzip -9 -c > Munin-node.1.44.SPARC.pkg.tar.gz
結果のアーカイブを他のサーバーに転送して、インストールを実行できます。
# gunzip -c Munin-node.1.44.SPARC.pkg.tar.gz | tar -xvf - # pkgadd -d $PWD
主要部分が完成しました。
アプリ
以下に、munin-nodeクライアントが最初に構成され、munin-node用のサービス(デーモン?)が作成されるポストインストールスクリプトの例を示します。
#!/bin/sh # /opt/munin/sbin/munin-node-configure --shell --families=contrib,auto | sh -x svccfg -v validate /etc/opt/munin/munin-node.xml svccfg -v import /etc/opt/munin/munin-node.xml svcadm disable application/munin-node echo "Before start munin-node service DO:" echo "1. edit munin-node.conf" echo "2. configure dns client" echo "3. passwd munin user"
munin-node.xmlファイルは個別に作成されました。
その内容:
<?xml version="1.0"?> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> <service_bundle type="manifest" name="export"> <service name="application/munin-node" type="service" version="0"> <create_default_instance enabled="true"/> <single_instance/> <dependency name="fs" grouping="require_all" restart_on="none" type="service"> <service_fmri value="svc:/system/filesystem/local"/> </dependency> <dependency name="network" grouping="require_all" restart_on="none" type="service"> <service_fmri value="svc:/milestone/network:default"/><code> </dependency> <dependency name="name-services" grouping="require_all" restart_on="none" type="service"> <service_fmri value="svc:/milestone/name-services:default"/> </dependency> <code><exec_method name="start" type="method" exec="munin-node" timeout_seconds="60"> <method_context> <method_credential user="root" group="root"/> <method_environment> <envvar name="PATH" value="/opt/munin/sbin:/usr/bin:/bin:/opt/csw/bin"/> </method_environment> </method_context> </exec_method> <exec_method name="stop" type="method" exec=":kill" timeout_seconds="60"> <method_context/> </exec_method> </service> <code></service_bundle>
ここでは、munin-node実行可能ファイルへのパスにのみ注意を払う必要があります。
preinstall: #!/bin/shgroupadd munin useradd -d /var/munin -m -s /usr/bin/bash -g munin munin cp /.profile /var/munin/ chown munin:munin /var/munin/.profile