tech::hexagram

personal note for technical issue.

mac miniでsnmpを動かすためのメモ

https://support.apple.com/kb/TA20884?locale=ja_JP&viewlocale=ja_JPsupport.apple.com

公式サイトを見ると、

アップルは、Admin CD 上の SNMP ツールMac OS X Server 10.1.5 以降で使用される場合にのみ、SNMP ツールに対するテクニカルサポートを行います。

とあるので、サポート対象外の設定となることに注意。

いろいろ調べて以下の記事を見つけたのでそれに沿って設定を行えばいけた。

http://kb.paessler.com/en/topic/41843-how-do-i-activate-snmp-on-mac-os-in-order-to-monitor-it-with-prtgkb.paessler.com

手順

手順に関しては凄くシンプル、以下2つだけやればOK

/etc/snmp/snmpd.confの設定

既存の snmpd.confsnmpd.conf.backup あたりに退避する。何もしていない状態だと snmpd.conf.default とdiffがないので特にこれをする必要もないが一応念のため。

#Allow read-access with the following SNMP Community String:
rocommunity public

# all other settings are optional but recommended.

# Location of the device
syslocation data centre A

# Human Contact for the device
syscontact SysAdmin

# System Name of the device
sysName SystemName

# the system OID for this device. This is optional but recommended,
# to identify this as a MAC OS system.
sysobjectid 1.3.6.1.4.1.8072.3.2.16

1.3.6.1.4.1.8072.3.2.16 は端末固有の値ではなく、 macosx として登録されている値なのでこのまま設定でOK。

http://cric.grenoble.cnrs.fr/Administrateurs/Outils/MIBS/?oid=1.3.6.1.4.1.8072.3.2cric.grenoble.cnrs.fr

launchctlへ登録

$ sudo launchctl load -w /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist

確認方法

プロセスが立ち上がっていることを確認する

mac-mini% ps aux | grep snmp                
root            14344   0.0  0.1  2548536  10664   ??  Ss    8:58AM   0:03.86 /usr/libexec/snmpd -f
user          14978   0.0  0.0  2434836    776 s000  S+    9:23AM   0:00.00 grep snmp

snmpwalk コマンドを利用して必要な情報が吐かれているか確認

mac-mini% snmpwalk -v 2c -c public localhost

👆のコマンドを叩いた後にばーっと色々なログが出てくれば問題なし。

windowsで入力した「~」とmacで入力した「〜」はUnicode文字コードが異なる

「〜」をwindowsで入力するとUnicode文字コードはU+FF5Eになり、macで入力するとU+301Cになる。 数値実体参照で言えばwindows~mac〜 となる。ドウシテコウナッタ…

詳しい説明は以下の記事にあった。

Oracleデータベースで、波ダッシュの文字化けはなぜ起きるのか?

今回ハマったのは、windowsで入力した「〜」を含む文字列を正規表現で抽出する際、正規表現macで書いていたため「〜」の文字コードがOS間で異なり、正しく抽出されないことだった。

解決策としてはwindowsで入力した「〜」をコピペして正規表現に記載した。すごくダサいので、もう少しスマートなやり方があれば良いのだが… 見た目には変わらないのでなぜ抽出できないのか小一時間悩んだためみなさんもお気をつけください。

Mac OSXで特定のディレクトリ配下の内容の変更を監視してコマンド実行する

launchctlを使うとお手軽に出来るみたいなのでメモ。

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
      <dict>
          <key>Label</key>
          <string>hoge.huga</string>
          <key>ProgramArguments</key>
          <array>
              <string>/bin/bash</string>
             <string>any command</string>
         </array>
         <key>WatchPaths</key>
         <array>
             <string>any paths</string>
         </array>
         <key>StandardOutputPath</key>
         <string>any output path</string>
         <key>StandardErrorPath</key>
         <string>any error path</string>
     </dict>
 </plist>
  • ProgramArguments : 実行したいコマンドを記述する。array内で、スペース区切りのコマンドをstringで記述する
  • WatchPaths : 変更を監視したいディレクトリやファイルを記述する。
  • StandardOutputPath : 標準出力のログを吐くパスを指定
  • StandardErrorPath : エラーのログを吐くパスを指定

いろいろ調べててincronだったりfseventだったり出てきたけど、上手く動かなかったのとunloadの方法がよくわからなかったのでこれが一番お手軽かつ確実かと。

タワレコの会員登録でメアドパス忘れ

タワレコのネット会員登録しようとしたら既に会員になっていた事案が発生。 5年以上前にガラケーから登録してたらしい。

ガラケー辿って会員ページ見に行ったら登録していたメアドが確認できてそこから芋づる式に記憶辿ってパスワード思い出してなんとか回避できた。危なかった…

これだからまだまだガラケー捨てられない。

VagrantのCentOS7の仮想環境で、ansibleがデフォルトの状態では動かなかった

仮想環境の構成管理をchefからansibleに乗り換えようと決意したものの、 デフォルトだとansible -m ping すら出来ない状況に。

以下の様なエラーが出ていた。

$ ansible development -m ping -i hosts -vvvv -c ssh
<192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.10> REMOTE_MODULE ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o Port=22 -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && echo $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452'
<192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmp8Y12_A TO /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping
192.168.33.10 | FAILED => failed to transfer file to /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping:

Connection closed

イメージには puppetlabs/centos-7.0-64-puppet を利用していたのだが、調べているとCentOS5, 6ではSFTPが無効になっているらしい。

tagomoris.hatenablog.com

立ち上げた仮想環境の /etc/ssh/sshd_config の中身を見ると以下のように、sftpに関する記述があった。

# File is managed by Puppet

AcceptEnv LANG LC_*
ChallengeResponseAuthentication no
GSSAPIAuthentication no
PermitRootLogin yes
PrintMotd no
Subsystem sftp /usr/lib/openssh/sftp-server
UseDNS no
UsePAM yes
X11Forwarding yes

記述があるにも関わらずpingが通らないのはおかしい、sftpのPATHはどうなってるのかと思って調べてみると、configに記載されているpathがなんと間違えていた。。

$ sudo find / -type f -name sftp-server
/usr/libexec/openssh/sftp-server

lib から libexec に修正し、sshdを再起動したらping通った。

$ ansible development -m ping -i hosts -vvvv
<192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.10> REMOTE_MODULE ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && echo $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133'
<192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmpjtkKIl TO /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ >/dev/null 2>&1'
192.168.33.10 | success >> {
    "changed": false,
    "ping": "pong"
}

んもー…