さくらのクラウドでRedmine

プロジェクトというかToDO管理がしたくて、やるならメールでチケット登録できてかんばん式管理もできるといいなということで、Redmineを選択。
さくらのクラウドでスタートアップスクリプト使うとRedmineのインストールまで一発OKで環境構築の時間削減できて良さげ。

アーカイブとスタートアップスクリプトは、以下の通り。

  • [public] CentOS 6.7 64bit #112800245382
  • [public] Redmine #112600163527

セットアップに20分ぐらいかかるとのことなので、弱虫ペダルを読む。
意気揚々ブラウザでアクセスしてみる

f:id:mittsun1979:20160610075427p:plain

Apacheです。こちらのページを参考に対応しました。
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 — Redmine.JP

passengerはインストール済みだったので、

# gem list | grep passenger
passenger (5.0.28)

passenger-install-apache2-moduleを実行して、デフォルトのままEnterで処理を進め、

# passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v5.0.28.
<snip>
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rvm/gems/ruby-2.3.0/gems/passenger-5.0.28
  PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.3.0/wrappers/ruby
</IfModule>
<snip>

最後あたりにApacheの設定が表示されるのでコピーして、空のpassenger.confに貼り付けして、Apacheを再起動。

# vi /etc/httpd/conf.d/passenger.conf
# /etc/init.d/httpd restart

再度ブラウザでアクセス。やったね。
f:id:mittsun1979:20160610081753p:plain

チケット登録して完了してくと、仕事やってる感はすごい。

各省HPのIPv6対応状況を調べてみた

数週間前に「全スマホIPv6接続を」ってニュースが流れてました。www.itmedia.co.jp
スマホ(端末)にIPv6割り振っても、コンテンツ提供者がIPv6対応してなければ。。。回線事業者(ISP)がIPv4への疎通性を提供しなければならないのかってことで、各省HPのIPv6対応状況を調べてみた。(2015/11/20現在)

府省等名 URL IPv6対応
内閣官房 http://www.cas.go.jp/
内閣法制局 http://www.clb.go.jp/
人事院 http://www.jinji.go.jp/ ×
内閣府 http://www.cao.go.jp/
宮内庁 http://www.kunaicho.go.jp/ ×
公正取引委員会 http://www.jftc.go.jp/ ×
国家公安委員会 http://www.npsc.go.jp/
警察庁 http://www.npa.go.jp/
特定個人情報保護委員会 http://www.ppc.go.jp/
金融庁 http://www.fsa.go.jp/ ×
消費者庁 http://www.caa.go.jp/ ×
復興庁 http://www.reconstruction.go.jp/ ×
総務省 http://www.soumu.go.jp/
公害等調整委員会 http://www.soumu.go.jp/kouchoi/
消防庁 http://www.fdma.go.jp/
法務省 http://www.moj.go.jp/
公安調査庁 http://www.moj.go.jp/KOUAN/
外務省 http://www.mofa.go.jp/mofaj/
財務省 http://www.mof.go.jp/ ×
国税庁 http://www.nta.go.jp/
文部科学省 http://www.mext.go.jp/
文化庁 http://www.bunka.go.jp/ ×
厚生労働省 http://www.mhlw.go.jp/
中央労働委員会 http://www.mhlw.go.jp/churoi/
農林水産省 http://www.maff.go.jp/ ×
林野庁 http://www.rinya.maff.go.jp/ ×
水産庁 http://www.jfa.maff.go.jp/ ×
経済産業省 http://www.meti.go.jp/
資源エネルギー庁 http://www.enecho.meti.go.jp/
特許庁 http://www.jpo.go.jp/ ×
中小企業庁 http://www.chusho.meti.go.jp/
国土交通省 http://www.mlit.go.jp/ ×
観光庁 http://www.mlit.go.jp/kankocho/ ×
気象庁 http://www.jma.go.jp/jma/ ×
運輸安全委員会 http://www.mlit.go.jp/jtsb/ ×
海上保安庁 http://www.kaiho.mlit.go.jp/ ×
環境省 http://www.env.go.jp/
防衛省 http://www.mod.go.jp/ ×
会計検査院 http://www.jbaudit.go.jp/ ×

結果は五分五分ってところでしょうか。なお、外務省はアカマイを利用しているようです。

うるう秒が2015年7月1日に挿入された。

うるう秒が2015年7月1日に挿入され、早1週間が経過しました。

2015年7月1日8時59分頃から待ち構え。

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-b3.nict.go. .NICT.           1 u  509 1024  377    8.011   -0.132   0.017
+ntp1.jpix.ad.jp 210.171.225.76   2 u  523 1024  377    6.776   -0.076   0.042
+ntp.tut.ac.jp   133.243.238.244  2 u  921 1024  377   16.271   -0.040   0.049
-ntp3.jst.mfeed. 133.243.236.17   2 u 1024 1024  377    6.541   -0.556   0.142


きたコレ。ズレた。(offset)

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-b3.nict.go. .NICT.           1 u  112 1024  377    7.945  -843.60 106.717
+ntp1.jpix.ad.jp 210.171.225.76   2 u  123 1024  377    6.758  -951.51 106.788
+ntp.tut.ac.jp   133.243.238.244  2 u  522 1024  377   16.339  -887.23 105.849
-ntp3.jst.mfeed. 133.243.236.17   2 u  625 1024  377    6.559  -1000.3 101.681


その後、徐々に時刻調整され、今に至る。

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-a3.nict.go. .NICT.           1 u  105 1024  377    6.445   -3.347   0.308
+ntp1.jpix.ad.jp 210.171.225.76   2 u  984 1024  377    6.820   -3.953   0.126
+ntp.tut.ac.jp   133.243.238.244  2 u   61 1024  377   16.281   -4.001   0.180
-ntp3.jst.mfeed. 133.243.236.17   2 u   64 1024  377    6.551   -2.549   0.151

次はいつか。楽しみに待つ。

CactiのCLI(コマンドライン)ツールはすごい助かる

Cactiに登録するデバイスや作成するグラフが大量にあるとき、CLIツール使うと時間短縮できてすごく助かる。コマンドのオプション指定で試行錯誤したので、備忘録として。

1. デバイスの登録

登録済みのホストテンプレートを確認する。

# php add_device.php --list-host-templates
Valid Host Templates: (id, name)
0       None
1       Generic SNMP-enabled Host
3       ucd/net SNMP Host
4       Karlnet Wireless Bridge
5       Cisco Router
6       Netware 4/5 Server
7       Windows 2000/XP Host
8       Local Linux Machine

デバイスを登録する。

# php add_device.php --description=cacti --ip=localhost --template=0 --disable=0 --avail=ping --ping_method=icmp --ping_retries=2 --version=2 --community=public --port=161 --timeout=500
Adding cacti (localhost) as "None" using SNMP v2 with community "public"
Success - new device-id: (2)

各オプションは、WebUIと対応付けて

f:id:mittsun1979:20150407160940p:plain


2. デバイスへグラフテンプレート(Graph Templates)を関連付け

デバイスのIDを確認する。

# php add_graph_template.php --list-hosts
Known Hosts: (id, hostname, template, description)
1       127.0.0.1       8       Localhost
2       localhost       0       cacti

システムに登録済みのグラフテンプレートを確認する。

# php add_graph_template.php --list-graph-templates
Known Graph Templates:(id, name)
2       Interface - Traffic (bits/sec)
3       ucd/net - Available Disk Space
4       ucd/net - CPU Usage
<snip>
34      SNMP - Generic OID Template

まだ関連付けられているグラフテンプレートはない。
f:id:mittsun1979:20150407160938p:plain

デバイスへグラフテンプレートを関連付けする。

# php add_graph_template.php --host-id=2 --graph-template-id=4
Success: Graph Template associated for host: (2: localhost) - graph-template: (4: ucd/net - CPU Usage)

グラフテンプレートが関連付けされた。
f:id:mittsun1979:20150407160939p:plain


3. デバイスへデータクエリ(Data Queries)を関連付け

デバイスのIDを確認する。

# php add_data_query.php --list-hosts

システムに登録済みのデータクエリを確認する。

# php add_data_query.php --list-data-queries
Known SNMP Queries:(id, name)
1       SNMP - Interface Statistics
2       ucd/net -  Get Monitored Partitions
3       Karlnet - Wireless Bridge Statistics
<snip>
9       SNMP - Get Processor Information

まだ関連付けられているデータクエリはない。
f:id:mittsun1979:20150407160937p:plain

デバイスへデータクエリを関連付けする。

# php add_data_query.php --host-id=3 --data-query-id=1 --reindex-method=1
Success - Host (2: localhost) data query (1: SNMP - Interface Statistics) reindex method (1: Uptime Goes Backwards)
# php add_data_query.php --host-id=3 --data-query-id=6 --reindex-method=1
Success - Host (3: localhost) data query (6: Unix - Get Mounted Partitions) reindex method (1: Uptime Goes Backwards)

データクエリが関連付けされた。
f:id:mittsun1979:20150407160936p:plain


4. グラフ作成

デバイスのIDを確認する。

php add_graphs.php --list-hosts

システムに登録済みのグラフテンプレート(Graph Templates)を確認する。

# php add_graphs.php --list-graph-templates
Known Graph Templates:(id, name)
2       Interface - Traffic (bits/sec)
3       ucd/net - Available Disk Space
<snip>
21      Unix - Available Disk Space
<snip>

システムに登録済みのデータクエリ(Data Queries)を確認する。

php add_graphs.php --list-snmp-queries

データクエリに関連付けされているグラフテンプレートを確認する。

# php add_graphs.php --snmp-query-id=6 --list-query-types
Known SNMP Query Types: (id, name)
15      Available Disk Space

Available Disk Spaceが関連付けられている。
f:id:mittsun1979:20150407160935p:plain

データクエリが取得するフィールドを確認する。

# php add_graphs.php --host-id=3 --snmp-query-id=6 --list-snmp-fields
Known SNMP Fields for host-id 3: (name)
dskDevice
dskMount

dskDevice, dskMountの2つのフィールドがある。
f:id:mittsun1979:20150407160934p:plain

データクエリが取得するフィールドの値を確認する。

# php add_graphs.php --host-id=3 --snmp-query-id=6 --snmp-field=dskDevice --list-snmp-values
Known values for dskDevice for host 3: (name)
/dev/vda2

dskDeviceの値は、"/dev/vda2"の1つ。
f:id:mittsun1979:20150407160932p:plain

グラフを作成する。

# php add_graphs.php --host-id=3 --graph-template-id=21 --graph-type=ds --snmp-query-id=6 --snmp-query-type-id=15 --snmp-field=dskDevice --snmp-value="/dev/vda2"
Graph Added - graph-id: (5) - data-source-ids: (8, 8)

チェックボックスが消えて、グラフが作成されていることがわかる。グラフページで実際に確認してみる。
f:id:mittsun1979:20150407160933p:plain

「--graph-typeは、Associated Graph Templatesのグラフを作成する時は、"cg"を指定。Associated Data Queriesのグラフを作成する時は、"ds"を指定。」ということでよいのだろうか。

5. グラフツリー

ツリーの一覧を確認する。

# php add_tree.php --list-trees
Known Trees:
id      sort method                     name
1       Manual Ordering (No Sorting)    Default Tree

Default Treeにデバイス(host)は、登録されていない。
f:id:mittsun1979:20150407160930p:plain

デバイスをツリーに追加する。

# php add_tree.php --type=node --node-type=host --tree-id=1 --host-id=3
Added Node node-id: (8)

Default Treeにデバイス(host:cacti)が登録された。
f:id:mittsun1979:20150407160931p:plain

GUIはわかりやすくて良いんだけど、作業を自動化したいときにはやっぱりCLIが便利だな。

Windowsが起動しなくなった時にXCOPYでデータをバックアップして事なきを得た

使用しているPC(Windows8)がWindows Update後に起動しなくなった。セーフモードでの起動もしない。困った。
そんな時にUSBメモリへデータをバックアップして事なきを得るまでの流れ。

1. PCメーカのサイトを参考にWindows 回復環境 (Windows RE) からコマンドプロンプトを起動する。

2. USBメモリをPCに挿入する。

3. DISKPARTコマンドを実行して、USBメモリのドライブレター(何ドライブ)を確認する。

c:\>diskpart
DISKPART>list volume
<snip>

4. XCOPYでデータをUSBメモリへコピーする。

c:\>xcopy Desktop I:\Backup /S /E /H /C /Y /R
<snip>
668 個のファイルをコピーしました。

常日頃からバックアップを取得することは大事。Amazon Cloud Driveの「Unlimited Everything」を契約するか。
無制限にファイルを保存できるAmazon Cloud Drive新プラン「Unlimited Everything」がついに登場、日本語版も準備中 - GIGAZINE

P.S.
コピー先にドライブ直下を指定したらコピーできず。ずいぶん悩まされた。

c:\>xcopy .\Desktop I:\ /S /E /H /C /Y /R
ファイル作成エラー - パラメーターが間違っています。

ディレクトリを作成できません - I:\
0 個のファイルをコピーしました。

xcopyのオプションは、以下のようにして確認。

c:\>xcopy /?

perlとawkのsubstr関数の違いにはまった

perlawkのsubstr関数の違いにはまった。文字列から部分文字列を取得するperlスクリプトawkに書き換えたら結果が異なった。
以下は、文字列"abcde"の1文字目から2文字、3文字目から3文字を取得する。

perlの場合

$ echo "abcde" | perl -lne 'print substr($_, 0, 2)'
ab
$ echo "abcde" | perl -lne 'print substr($_, 2, 3)'
cde


awkの場合

$ echo "abcde" | awk '{ print substr($0, 0, 2) }'
ab
$ echo "abcde" | awk '{ print substr($0, 2, 3) }'
bcd

perlawkは、1文字目が0と思ったら、awkは1文字目が1のようだ(substrに2番目の引数)。だけど、以下の結果はすべて同じ、なぜなんだ。

$ echo "abcde" | awk '{ print substr($0, 0, 2) }'
ab
$ echo "abcde" | awk '{ print substr($0, 1, 2) }'
ab
$ echo "abcde" | awk '{ print substr($0, -10000, 2) }'
ab

これは、ドキュメントやソースコードを読めということですね。

Raspberry PiでPWM制御を使ってLEDを点滅

f:id:mittsun1979:20150208212122j:plain

※本サイトを参考にして被った損害、怪我、事故、障害、不都合、不利益等に関して責任は一切負いません。

PWM制御を行うと、点灯時間と消灯時間を調整してLEDの光を明るく見せたり暗く見たりできる。
下記のサイトを参考に(模倣)した。
raspberry-gpio-python / Wiki / PWM

GPIO17, 18, 22, 23のそれぞれに100ΩとLED(アノード)を直列に接続し、LED(カソード)をGNDへ。
4個のLEDが順々に徐々に明るくなって、徐々に暗くなっていく。

#!/usr/bin/python
import time
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
DEBUG = 0

# 使用するGPIO
GPIO17 = 17 
GPIO18 = 18 
GPIO22 = 22 
GPIO23 = 23 

# GPIOの設定
GPIO.output(pin1, False)
GPIO.output(pin2, False)
GPIO.output(pin3, False)
GPIO.output(pin4, False)

GPIO.setup(GPIO17, GPIO.OUT)
GPIO.setup(GPIO18, GPIO.OUT)
GPIO.setup(GPIO22, GPIO.OUT)
GPIO.setup(GPIO23, GPIO.OUT)


p17 = GPIO.PWM(GPIO17, 60)
p18 = GPIO.PWM(GPIO18, 60)
p22 = GPIO.PWM(GPIO22, 60)
p23 = GPIO.PWM(GPIO23, 60)
p17.start(0)
p18.start(0)
p22.start(0)
p23.start(0)

try:
	while 1:
		# 徐々に明るく
		for dc in range(0, 101, 20):
			p17.ChangeDutyCycle(dc)
			time.sleep(0.01)
		for dc in range(0, 101, 20):
			p18.ChangeDutyCycle(dc)
			time.sleep(0.01)
		for dc in range(0, 101, 20):
			p22.ChangeDutyCycle(dc)
			time.sleep(0.01)
		for dc in range(0, 101, 20):
			p23.ChangeDutyCycle(dc)
			time.sleep(0.01)

		# 徐々に暗く
		for dc in range(100, -1, -20):
			p17.ChangeDutyCycle(dc)
			time.sleep(0.01)
		for dc in range(100, -1, -20):
			p18.ChangeDutyCycle(dc)
			time.sleep(0.01)
		for dc in range(100, -1, -20):
			p22.ChangeDutyCycle(dc)
			time.sleep(0.01)
		for dc in range(100, -1, -20):
			p23.ChangeDutyCycle(dc)
			time.sleep(0.01)
except KeyboardInterrupt:
	pass
p17.stop()
p18.stop()
p22.stop()
p23.stop()

GPIO.cleanup()

クリスマスイルミネーション作りたいね。