2019年10月23日水曜日

TS3100CLI.jar を探しているあなたへ


●TS3500でクリーニングテープの使用期限がきたことを知りたい


Operator Intervention の TRAP を待つ、などと気の長い人はおいといて、遠隔地にH/Wがある場合、ステータスを定期的に確認しておくと何かと事前に対応が可能になって便利です。
要はUnixからコマンドラインでinventoryを取得できれば良いのですが、標準のLibraryではテープのLoad回数までは取れなかったりします。(Webクライアントからだと見える)

TS3500 についてはメーカーから 「TS3500CLI.jar」 が提供されていて下記から入手が可能。

https://www.ibm.com/support/pages/ts3500-command-line-interface
TS3500 CLI Downloads
 Download RELEASE   DATE      LANGUAGE  SIZE   Download Options
 IBM TS3500 CLI 2     Oct 2017 US English    1646265 B HTTPS




【使用方法】
#java  -jar TS3500CLI.jar -a <テープ装置IP> --viewCleaningCartridges -u ID -p パス

前提:java が動作すること
下記サンプルの使用ディレクトリは /home/root99/bin と /home/root99/tmp/

例)



これを利用して、特定のクリーニングテープのステータスを取得すれば良いことになる。
CLNING01,   Cln Cartridge,               0, LTO Ultrium-1, Slot(Fx,Cx,Rxx),               15,   
上記の例では、 15 という文字列を awk か何かで切り出して 残り回数が 0 になったら
アラートを出すようにすれば良いと思う。


CLNG_tape_chk_3500.sh







●TS3100でクリーニングテープの使用期限がきたことを知りたい

ところが、TS3100CLI.jar とか TS3200CLI.jar を探しても見つからない。どうやら提供されていないようなので 3100 と 3200 用のHTMLを取得するシェルを作ってみた。

前提:Unix で GNU curl が入っていること。
下記サンプルの使用ディレクトリは /home/root99/bin と /home/root99/tmp/

getTS3100_inventory.sh

※2019/11/06 loginlevel.ssi アドレスをユーザーレベル毎に修正


getTS3200_inventory.sh

※2019/11/06 loginlevel.ssi アドレスをユーザーレベル毎に修正



…と、上記を実行するとこんな風にブラウザーで見ているままの表記が取得できるので

CLINING01  23       22       21       20      Right Magazine
 19       18       17       16
 15       14       13       12
                   Cartridge details for Right Magazine
Slot #AttnStatusIn DriveLabelMedia LoadsComment
            12           Empty                  ------------
            13           Empty                  ------------
            14           Empty                  ------------
            15           Empty                  ------------
            16           Empty                  ------------
            17           Empty                  ------------
            18           Empty                  ------------
            19           Empty                  ------------
            20           Empty                  ------------
            21           Empty                  ------------
            22           Empty                  ------------
            23            *Res*                  CLINING01    16            Clean Tape


TS3500 の時と同じようにクリーニングの Load回数のところを切り出して判定するだけ。
ちなみに 
TS3500 は残り回数の表示だが、
TS3100、TS3200 の場合は使用回数なので注意すること。

上記の例では、 16 という文字列を awk か何かで切り出して Max である 50 になったら
アラートを出すようにすれば良いと思う。




もし User Login Limit などと表示されて、テープ装置のWebにどのアカウントからもログインできなくなってしまった場合は、落ち着いて一服でもしてきましょう。
その場合だと、複数起動しすぎているかログアウト処理が成功してない可能性があるので、よく見直してください。




いじょ。




詳解 シェルスクリプト アーノルド ロビンス (著), ネルソン・H.F. ベーブ (著), Arnold Robbins (原著), Nelson H.F. Beebe (原著), 日向 あおい (翻訳)
詳解 シェルスクリプト
 

2019年1月25日金曜日

OSをアップデートしたらDSAのssh-keyが使えなくなってしまった人へ

結論から言うと、これをユーザーの config ファイルか /etc/ssh/ssh_config に書くと良い


#cat /home/ユーザー/.ssh/config






OSをアップグレードしたら ssh のバージョンが上がって DSAを無効にされてしまい

 上記のエラーでサーバーにつながらなくなってしまった。

 ぐぐったら、オプションで
 HostKeyAlgorithms +ssh-dss
だけはすぐに出てくるが、公開鍵を指定しているにも関わらずパスワードを聞いてくるので用途を満たさない。
だいたいセキュリティの押し売りなんざ、こちとら閉鎖環境で使ってんだから余計なお世話だ
FireFoxの利用者離れを見りゃ分かんだろ

以下は検索でひっかかるようエラーメッセージを入れたに過ぎないので蛇足である。

 

環境をいじりたくなければ、コマンドのオプションに入れてやるだけでも良い
以下を二つとも使うこと。

-oHostKeyAlgorithms=+ssh-dss
-oPubkeyAcceptedKeyTypes=+ssh-dss

 例:
 

なかなか対処が見つからなくてイライラしたので自分用に書いておく。



いじょ。


すべてのUNIXで20年動くプログラムはどう書くべきか
すべてのUNIXで20年動くプログラムはどう書くべきか

2017年5月19日金曜日

仮想環境のRHEL7およびCentOS7で起動時に時刻が9時間ずれる問題のメモ


【定義】
 BIOS時間 = hwclock = RTC time(Real Time Clock)
 OS時間 = SYSTEM時刻 = Universal time = UTC(Linux)
 Local time = (OS時間+9時間) = Asia/Tokyo (JST, +0900)


【前提】
・RHEL6 の時刻同期の仕組み (ntpd)
Red Hat Enterprise Linux 6 では、hwclock コマンドは毎回のシステムのシャットダウン
または再起動時に自動的に実行されますが、これは Red Hat Enterprise Linux 7 では実行されません。
システムクロックが Network Time Protocol (NTP) または Precision Time Protocol (PTP) で同期される場合、
カーネルは自動的に 11分ごとにハードウェアクロックをシステムクロックに同期します。
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Configuring_the_Date_and_Time-hwclock.html

※RHEL6 の時は自動的にOS時間でBIOSの時間を上書き修正していた


・LinuxとWindowsのハードウェアクロックの扱いは違う
Linux ディストリビューションのほとんどは、ハードウェア クロックを UTC として扱うのが既定です。
Windows マシンは、ハードウェア クロックにローカル時刻を格納します。
タイムゾーンの設定が日本であれば、GMT+9:00 (=UTC+9:00) の時刻がハードウェア クロックに格納されています。
http://yamanxworld.blogspot.jp/2010/01/linux-9.html

※Linuxは起動時に BIOS時間をUTCの前提で採用し+9時間したものをローカル時間として利用する。
 Windowsは起動時にBIOS時間をそのままローカル時間として採用する。




・WindowsはBIOS時間でOS時間を設定する
NTP サーバーに対するアクティブな接続が存在しない場合、システム時刻が BIOS クロックと同期され、
時刻の差異が 60 秒を超えた場合に、システム時刻が BIOS クロックに合わせて自動的に修正されます。
https://social.technet.microsoft.com/Forums/ja-JP/7d33c109-4d56-4420-be54-e589a890d206/windowsbiosrtc?forum=w7itprogeneralja
https://support.microsoft.com/ja-jp/help/946033/the-system-time-may-differ-from-the-bios-time-on-a-windows-based-computer-that-supports-high-precision-event-timer



【仮説】
・前提から推測される現象の説明

・仮想環境に異なるOSが混在するケースのシーケンス
Windowsシャットダウン
 WindowsゲストによりBIOS時間がローカル時間(UTC+9:00)として設定される
Linux起動
 LinuxゲストではBIOS時間(Windowsによってローカル時間に設定済み)に +9:00 した値をOS時間として採用する
 起動時に ntpdate が実行される場合、OS時間は(UTC+9:00)で正しく修正される
 11分毎に(ntpdの場合)ローカル時間(UTC+9:00)をBIOS時間に継続して上書き設定する
WindowsではBIOS時間とOS時間が常に9時間ずれた状態で稼動している


・仮想環境に異なるOSが混在するケースのシーケンス(RHEL7およびCentOS7のケース)
Windowsシャットダウン
 WindowsゲストによりBIOS時間がローカル時間(UTC+9:00)として設定される
Linux起動
 LinuxゲストではBIOS時間(Windowsによってローカル時間に設定済み)に +9:00 した値をOS時間として採用する
 LinuxのOS時間はローカル時間+9:00で稼動するためずれが生じる
WindowsではBIOS時間とOS時間にずれが無い状態で稼動している



【対策】
・LinuxとWindowsでは、システム時間に採用するソースの扱いが仕様として異なることが原因である
対策としては以下の手法が考えられる

「Linux起動時にBIOSから取得される値は、Windowsによって設定されたローカル時間である」を正とした場合
・カーネル起動時およびシャットダウン時のシステムログの時刻がBIOS時間+9:00された時刻が記録される可能性があるがこれは無視する
・OS起動時にNTPサーバーの時刻でシステム時間の強制同期を行い、BIOS時間は考慮しない

「Linux起動時にBIOSから取得される値は、UTC時間である」を正とした場合
・Windowsを再起動したタイミングでBIOS時間がローカル時間に修正されているため、都度(Linux側から)UTC時間に修正する
 ただし、WindowsゲストはBIOS時間に影響を受けておりntpサービスが途切れた場合に不具合がある
・Linuxの起動時のみBIOS時間をUTCに修正する


その他
・仮想のハードウェアにWindowsとlinuxを混在させない(LinuxのみであればホストをUTCにすれば解決)
・ホスト側でゲストからの時刻修正を受け付けない(LinuxはUTCとしてBIOS時間を取得することはできない)
・ゲスト起動中にOS時間とBIOS時間が徐々にずれていく現象は仮想ホストにおけるRTCのエミュレーションによる差分が生じるためとされ、本事象とは関係がない
 http://d.hatena.ne.jp/dayflower/20071210/1197254725

いじょ。

2016年10月27日木曜日

国別IP割り当てリスト(CIDR.txt)の作り方

CentOS7でいろいろ作業がしにくくなった昨今、皆様いかがお過ごしでしょうか。

 以前より某サイト様から ACCEPT_COUNTRY で接続先を国単位で制限するiptables のshellを利用させて貰っていましたが、かなり大幅な更新があったようで、独自に機能追加している自分としては、またもや手を入れるはめになりました。

CIDRとは

IP Address=インターネットにおける使用者の住所
ってことは大方の人がご存知だと思うんですが、プロバイダーのさらに上位の管理組織では国単位でIPアドレスの割り振りをしています。


各組織が公開している割り当てリストを実際に見るとこんな感じ。
# cat delegated-arin-extended-latest|grep "JP|ipv4"| head -10
arin|JP|ipv4|64.56.160.0|8192|20000321|allocated|aeff7d84c92f62a27ea05c2afe31f951
arin|JP|ipv4|170.105.0.0|65536|19940404|assigned|d1f7854cf92b0efd0e649f0a6c29921a
arin|JP|ipv4|199.103.103.0|256|19940625|assigned|629f9ff288afae0ad0a4b0b4123b80e3
arin|JP|ipv4|204.79.157.0|256|19941214|assigned|bbb16281966807d187b902dd9fcdbfd4
arin|JP|ipv4|204.79.158.0|256|19941214|assigned|bbb16281966807d187b902dd9fcdbfd4
arin|JP|ipv4|204.79.218.0|256|19941219|assigned|03c5127ab52527ee0ff75c768d49d461
arin|JP|ipv4|204.231.230.0|256|19950421|assigned|a28492c99368fed3ff029e96ade823c8
arin|JP|ipv4|204.231.251.0|256|19950421|assigned|0dddb111d7c3ff3c02b3d847a0fb6ffb
arin|JP|ipv4|204.231.252.0|256|19950421|assigned|0dddb111d7c3ff3c02b3d847a0fb6ffb
arin|JP|ipv4|206.3.0.0|8192|19950508|allocated|aeff7d84c92f62a27ea05c2afe31f951

例として1行目)
arin|JP|ipv4|64.56.160.0|8192
ここで実際に必要なのは、
 64.56.160.0から8192個のIPアドレスはJP(Japan)に割り当てるよって情報だけです。


・それぞれ以下のURLからゲットできます。
wget http://ftp.apnic.net/stats/apnic/delegated-apnic-latest               #APNIC
wget ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest  #ARIN

wget http://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest    #RIPE
wget http://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest      #LACNIC
wget http://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest    #AFRINIC

しかし、そのままでは使えない問題が!

iptables の指定方法ではサブネットマスクの単位で指定しなければならないのです。
 64.56.160.0から8192個 → 64.56.160.0/19

よって計算して変換します。
とは言え、別に簡単な話で下のように決まってる数値を置き換えればいいだけなので
計算しなくたって、32個の文字列の置き換えでも可能なわけです。

IPアドレスが1個の場合           →/32    ←ここから
IPアドレスが2個の場合           →/31
IPアドレスが4個の場合           →/30
IPアドレスが8個の場合           →/29
IPアドレスが16個の場合          →/28
IPアドレスが32個の場合          →/27
IPアドレスが64個の場合          →/26
IPアドレスが128個の場合        →/25
IPアドレスが256個の場合        →/24    ←ここまでがクラスC
IPアドレスが512個の場合        →/23    ←ここからクラスB
IPアドレスが1024個の場合      →/22
IPアドレスが2048個の場合    →/21
IPアドレスが4096個の場合    →/20
IPアドレスが8192個の場合    →/19
IPアドレスが16384個の場合  →/18
IPアドレスが32768個の場合  →/17
IPアドレスが65536個の場合  →/16
IPアドレスが131072個の場合 →/15    ←ここまでがクラスB
IPアドレスが262144個の場合 →/14    ←ここからクラスA
IPアドレスが524288個の場合 →/13
IPアドレスが1048576個の場合 →/12
IPアドレスが2097152個の場合 →/11
IPアドレスが4194304個の場合 →/10
IPアドレスが8388608個の場合 →/9
IPアドレスが16777216個の場合→/8
IPアドレスが33554432個の場合→/7
IPアドレスが67108864個の場合→/6
IPアドレスが134217728個の場合→/5
IPアドレスが268435456個の場合→/4
IPアドレスが536870912個の場合→/3
IPアドレスが1073741824個の場合→/2
IPアドレスが2147483648個の場合→/1

 ほんとはクラスCまでで止めようと思ったんだけど、真に受けて本当に変換テーブル
書いちゃう人がいて「なんで途中までしか無いんだよヾ(*`Д´*)ノ」 とか言ってこない
とも限らないので頑張って書きました。


という訳で各組織からリストをちょっぱってきて
arin|JP|ipv4|64.56.160.0|8192|20000321|allocated|aeff7d84c92f62a27ea05c2afe31f951
arin|JP|ipv4|170.105.0.0|65536|19940404|assigned|d1f7854cf92b0efd0e649f0a6c29921a
arin|JP|ipv4|199.103.103.0|256|19940625|assigned|629f9ff288afae0ad0a4b0b4123b80e3

     ↓
JP    64.56.160.0/19
JP    170.105.0.0/16

JP    199.103.103.0/24
このような形に整形するスクリプトがこれです。

[root99@ /home/root99/bin]# cat ./make_cidr.sh


なんで "..........." て延々と表示してるかって言うと、Firewall内とか通信環境の悪いとこから実行した場合、パケットが長時間途切れて切断されちゃうからですね。
不要だと思ったら printf "." をコメントアウトしましょう。



DNS & BIND 第5版   オライリージャパン 
DNS & BIND 第5版   オライリージャパン


いじょ。

2016年9月21日水曜日

http(port 80)のセッション数をリアルタイムで監視したい

Webサーバーのセッション数の上限が低いせいで表示が重たいのでは?
と思ったので監視用にshellを作ってみた。

オプションはvmstat風。
 中身はnetstat -pantu と ps -eaf してるだけなのでroot権限で実行するのが望ましい。



[注意]
eth0に設定された ip_addr:80 のセッションしかカウントしません。
SSL証明書は手前で解決しているため。


[実行結果]
[root99@ ~/bin]# ./http_sess_counter.sh
error: Not Arg!
   ./http_sess_counter.sh WaitTime(s) Count
   example: ./http_sess_counter.sh 5
   example: ./http_sess_counter.sh 60 1440


[root99@ ~/bin]# ./http_sess_counter.sh  60 30
TIME_WAIT       FIN_WAIT2       ESTABLISHED     LAST_ACK        CLOSE_WAIT      TOTAL_SESS      HTTPD_CNT       DATE
    143              18              51               1               1             214              44         20XX/mm/dd 18:37:08


[Shell Source: http_sess_counter.sh ]



いじょ。

2015年6月25日木曜日

世界一かんたんな「うるう秒」対応

LeapIndicator(LIフラグ)を受け取る前にntpdを停止
うるう秒の調整が終わったら起動。


#cronに以下を挿入
01 00 30 06 * /etc/init.d/ntpd stop >/dev/null 2>&1
05 09 01 07 * /etc/init.d/ntpd start >/dev/null 2>&1


以上、これ以外なにも必要なし。




相変わらずIT業界恒例のマッチポンプ。
 ni●tは、Liフラグを送信しないntpサーバーを建てろよ糞が。




【参考情報】
https://access.redhat.com/ja/node/1362753
 うるう秒挿入後に Leap Second Insertion フラグを削除する

http://www-06.ibm.com/jp/linux/tech/doc/0019db89.html
【Technical Notes】Linux システムクロックの『うるう秒』調整

http://hiroki.jp/leap-second-2015
7/1の閏秒を迎えるにあたってLinuxでは何をすべきか?


2014年3月25日火曜日

Tera Term ログ出力の改行についてのメモ

Tera Termでは、ログ出力するとタームの画面の端で改行が入るため、後からエディターで見た場合に読みづらいログになることがある。


この解決方法は、INIファイルに
Enablecontinuedlinecopy=on
を書けばよい。

 ※デフォルトは off になっている。


オリジナルのINIを作成する場合は、
[設定(S)]→[設定の保存(S)]  で名前をつけて現状を保存し、macroファイル内で
strconcat msg ':22 /ssh /KR=UTF-8 /KT=UTF-8 /F=example.ini /auth=password /user='
のように指定する。



「tera term ログ出力 改行」
でググったらたまたま見つけたんだけど、このオプションは潮田って人のおかげなのね。
http://www.freeml.com/teraterm/76/latest








Linuxカーネル解析入門 (I・O BOOKS)  平田 豊(著) 
Linuxカーネル解析入門 (I・O BOOKS)  平田 豊 (著)
 


.