GLPI + FusionInventoryの小さなユーティリティ

この束についていくつのコピーが破損したか-カウントしないでください。 両方の製品のフォーラムには、質問が殺到しています。 しかし、ここで私は答えと私のような質問を見つけませんでした。 まあ、または少なくともそれらへのわかりやすい答え。



質問が2つだけありました。

  1. ネットワークプリンターの印刷ページカウンターを強制的に変更するにはどうすればよいですか? FusionInventoryは、インベントリ中にSNMPによって取得された値を内部的に保存しますが、メインフィールドは更新されません。
  2. Thinstationを実行しているディスクレスステーションでインベントリを開始する方法は? あまり大きくない会社と同様に、ライセンス料は、5年に1回、地区全体で歯を磨くことによって与えられます。 その結果、手元にあったものから組み立てられたディスクレスステーションの多彩な公園があります。


当然、椅子から立ち上がらずに両方の問題を解決したかったのです。 多くの技術はありませんが、領土的にはいくつかの地域にあるため、すべての人を回避することはできません。



さらにすべてのジェスチャーは、KVM仮想マシン、1Gb RAM、10GB HDD、Debian 7、GLPI 0.85.4、FusionInventory Plugin 1.2の構成で実行されました。



最初の質問で、すべてが非常に単純であることが判明しました。 すべての値はMySQLに保存されるため、残っているのはすべての依存関係を見つけ、GLPI内のレコードがデータベースへの直接書き込みを中断していないかどうかを確認することだけです。



その結果、ここにそのようなスクリプトがあります(注意:Bydlokod!):



#!/bin/bash msql_u='glpi' # MySQL msql_p='glpi' # MySQL msql_db='glpi' # MySQL mysql -u $msql_u -p$msql_p -D $msql_db -B -N -s -e 'select id,last_pages_counter from glpi_printers where (have_ethernet = 1);'| while read -r line do printer_glpi_counter=$(echo $line | awk '{print $2}') printer_ip=$(mysql -u $msql_u -p$msql_p -D $msql_db -B -N -s -e "SELECT name FROM glpi_ipaddresses WHERE mainitems_id = $(echo $line | awk '{print $1}') AND mainitemtype = 'Printer';") printer_cur_counter=$(snmpwalk -Ovq -c public -v 1 $printer_ip 1.3.6.1.2.1.43.10.2.1.4.1.1 2>/dev/null) if [ $printer_cur_counter -gt $printer_glpi_counter ] ; then mysql -u $msql_u -p$msql_p -D $msql_db -B -N -s -e "UPDATE glpi_printers SET last_pages_counter=$printer_cur_counter,date_mod=NOW() WHERE id=$(echo $line | awk '{print $1}')" fi done
      
      





2つのテーブルが使用されます。



SNMP経由でプリンターから現在のページカウンターを取得し、GLPIの現在のページカウンターと比較します。それ以上の場合は、データベースに書き込み、レコードが変更された日付を変更します。



1週間のテストにより、アカウンティングが正しく行われ、何も中断せず、動作するGLPIに対してスクリプトが設定されたことが示されました。 結果はこの写真です:



画像



大容量のカートリッジで100ページ以上印刷されたのは奇妙です。 そして、私は彼らがほぼ同じ間隔で変化しているようにしか思えなかった。 しかし、これらはそれらを実行する人への質問です。



2番目の質問は私の怠lazを混乱させました。 fusioninventory-agentが完全に記述されているため、rdesktop、freerdp、サウンド、およびモジュールで別の頭痛の種となるthinstationを再構築するか、perl去勢を最大化し、モジュールを組み立てます。



実際、2番目のオプションは勝ちました。アセンブリにもう一度負担をかけたくなかったため、在庫は毎日のルーチンではなかったので、週に1回立ち上げて正常でした。



エージェントがゆっくりと掘り出して数日間、鉄の在庫に必要な(まあ、適切なスタッフ)ユーティリティが特定されました:lspci、lsusb、fdisk、arch、dmidecode、get-edid、ifconfig、parse-edidなど。 ここで最初の落とし穴が明らかになりました:Thinstationのlspci、fdisk、および他の多くのユーティリティ-busyboxのエイリアスであり、もちろん必要なキーでは動作しません。



2番目の落とし穴は、アーキテクチャの定義でした。 何らかの理由で、エージェントはlinux-thread-multi値を受け取り、そのようなアーキテクチャの処理が提供されていないため、すべてがさらに停止しました。 エージェント/タスク/インベントリ/ Linux / i386.pmに松葉杖を配置する必要がありました。



それは:



 return $Config{archname} =~ /^(i686|x86_64)/;
      
      





次のようになりました:



 return $Config{archname} =~ /^(i686|x86_64|linux-thread-multi)/;
      
      





残りの石は、「必要なユーティリティがそのように機能せず、値を返さないため、インベントリを作成しません」というシリーズのものでした。 修正するには、lspci、lsusb、fdisk、arch、dmidecode、get-edid、parse-edidをアセンブリにプッシュし、エージェントスクリプトでこれらのユーティリティへのパスを変更する必要がありました。 奇妙ですが、ほとんどすべてのパスが絶対パスとして記述されていました。 はい、これは開発者の問題です。



エージェントを起動する実行可能スクリプトは次のようになりました。

 #!/bin/sh export PERL5LIB=/FusionInventory/perl/lib/:/FusionInventory/agent/:/FusionInventory/perl/agent/:/FusionInventory/perl/site/lib:/FusionInventory/perl/vendor/lib/ cd /FusionInventory/perl/bin ./perl fusioninventory-agent -f
      
      





このスクリプトは、1日2回インベントリでクラウンによって実行されます。 在庫日は個別に選択されます。 毎週月曜日にあります。

モジュールの最初の動作アセンブリは、サイズが大きく生まれました-13 mb。 しかし、うまくいきました。 そして彼女はバタンと働いた。

Invented Thinstationのスクリーンショット










「ファイル補完」の結果、モジュールのサイズは5.1 mbに減少しました。 捨てるべきものは他にありません。



モジュールの最終バージョンへのリンク



モジュールを使用する前に、モジュール内のGLPIへのパスを修正する必要があります。 ファイルが開かれ、通常のtar.gzアーカイブとして解凍されます。 ./FusionInventory/etc/agent.cfgを編集します

これは欠陥であることは知っていますが、起動時にthinstation.conf.networkからパラメーターを取得する方法が見つかりませんでした。



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



Thinstationについては、thinstation.proに感謝します。thinstation.proは 、シンクライアント用のカスタムモジュールの構築方法を説明してくれました。



UPD:

パラメータの転送を処理しました。 ここで、インベントリサーバーのアドレスを設定するには、thinstation.conf.networkファイルに行を追加するだけです

 FUSION_SERVER="http://__/plugins/fusioninventory/"
      
      






All Articles