オンプレサーバで MAC アドレスを IPMI 経由で取得する方法

April 15th, 2014 by naoya | No Comments | Filed in day

オンプレサーバの場合、OS をインストールするには、事前に MAC アドレスが分からないと、自動的にネットワークインストールして OS をインストールすることができません。

今まで使ったことがある二つのメーカーについて、IPMI 経由でオンボード NIC の MAC アドレスを取得する方法を紹介したいと思います。そのため、事前い IPMI の IP アドレスなどを設定しておくことが前提条件となります。

SuperMicro

公式情報は、こちらにあります。


$ ipmitool -I lanplus -H -U raw 0x30 0x21
※パスワードを入力します

ここで表示された 10 バイト取得した値のうち、最後から 6 byte までは LAN1(eth0) の MAC Address、LAN2(eth1) は最後のバイトに 1 足したものになります。

HP ProLiant

HTTP で XML 情報を取得すると、その中に含まれています。EC2 みたいで、便利ですね!


$ curl https:///xmldata?item=all -k

で出力される XML の中の MACADDR 要素が MAC アドレスとなります。

Tags:

OS X で Shift+Space で入力ソースを切り替える方法

April 10th, 2014 by naoya | No Comments | Filed in day

OS X で、Shift+Space を英語・日本語を切り替えるために KeyRemap4MacBook の Shift + Space to KANA/EISUU (toggle) を有効にしてしたのですが、最近しばらくすると急にこの設定がきかなくなって困っていました。この現象は、Google Groups に報告しておいたのですが、どうも原因が分からなかったので、システム設定標準の Select next source in Input menu のショートカットをなんとか切り替えることができないか調査してみました。

通常のキーボードの設定画面では、Shift+Space を押しても設定をすることができません。
そこで、直接設定ファイルを書き換えることでうまく行きました。

XCode をインストールしている環境でターミナルより、次のコマンドで設定ファイルを開きます。

$ open ~/Library/Preferences/com.apple.symbolichotkeys.plist

そうすると、plist 設定ファイルの編集画面を開きますので、AppleSymbolicHotKeys 以下の、次の2つの設定を編集します。

1. 61 > value > parameters > item 2 の値を 1572864 を Shift のキーコードである 131072 に変更します
2. 60 > value > parameters > item 2 の値を 1048576 を Option-Shift キーの値である 655360 に変更します

上記の二つの設定を編集したあと plist ファイルを保存して、再起動すると、キーボード設定画面が次のようになって、Shift + Space で入力リソースを切り替えることができます。

keyboard

この設定、個人的にはかなり必須なので、Boxen で自動化したいところなので、あわせて試してみたいと思います。

Tags:

RHEL / Centos / Ubuntu のセキュリティ情報のまとめ

April 8th, 2014 by naoya | No Comments | Filed in day

日頃から業務などで利用している Linux のディストリビューションのセキュリティ情報は、日々チェックして、日々運用していく必要がありますよね。

なので、日頃から使っている各 Linux のディストリビューションのセキュリティ情報の入手先をまとめてみました。

RHEL

それぞれのバージョンごとに公式ページに Errata として情報がとまってますが、RSS はないようですね。

RHEL5 系

RHEL6 系

CentOS

CentOS は、基本的に RHEL ベースなので、RHEL のアップデート情報元にセキュリティアップデートなどが行われているはずです。
セキュリティアップデートなどの情報は、CentOS-announce mailing list に投稿されているので、このメーリングリストを購読すればいいでしょう。

あと、非公式だとは思いますが、LWN.net にも CentOS security alerts が公開されていました。

その他、yum コマンドでも、次のようにすると確認することができます。

$ sudo yum install yum-security
$ sudo yum list-security
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
epel/updateinfo | 509 kB 00:00
FEDORA-EPEL-2014-0446 bugfix PyYAML-3.09-10.el5.x86_64
FEDORA-EPEL-2014-0792 bugfix glances-1.7.4-1.el5.noarch
FEDORA-EPEL-2014-0531 security libyaml-0.1.2-6.el5.x86_64
list-security done

yum-security も便利ですよね。

Ubuntu

Ubuntu は、公式ページに Ubuntu Security notices が公開されています。
リリースごとにフィルターでもできて、RSS もあって便利です。
例えば、12.04 LTS (precise) は、ここになります。

Amazon Linux AMI

最後に最近 Amazon Linux AMI を使っている人も多いかと思いますが、Amazon Linux AMI Security Center に情報がまとまっています。

普段の運用の中でセキュリティアップデートは、かなり重要な業務になるので、怠らずにしっかりとやりたいですよね。

Tags: ,

Windows 8.1 で、Windows + l(ロック画面)を無効にする方法

April 7th, 2014 by naoya | No Comments | Filed in day

VMware Fusion 上などで、Windows 8.1 を使っているとき、自動ログインして使っているのですが、自動ログインを有効にしても Windows + l のロック画面のショートカットが有効のままで困っていました。

具体的には、自動ログインを有効にするときは自動ログインユーザのパスワードなしにするのですが、Windows + l でロック画面を表示してしまうと、ログインができなく、再起動する必要がありました。

なんとかならないものかと思ってすこし調べたところ、Disable Windows L Keyboard Shortcut In Windows picture2 が見つかりました。

この方法は、レジストリを変更するため、自己責任の上行って下さい。

1. regedit を起動します
2. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System キーを作成します
3. DisableLockWorkstation という DWORD 32-bit を作成してから、0 から 1 に値を変更します

これだけで、Windows(Command) + l のショートカットが無効になります。
これで、すこし Windows 8.1 の使い心地が改善されました。

この設定をエクスポートしたレジストリファイルを書いておきますね。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisableLockWorkstation"=dword:00000001

Tags:

Software Collections for CentOS-6

February 24th, 2014 by naoya | No Comments | Filed in day

Software Collections for CentOS-6 がリリースされました。

Software Collections というのは、RHEL で提供されている追加コンポーネントです。

この追加コンポーネントには、次のものが含まれています。

  • Perl 5.16.4
  • PHP 5.4.14
  • Python 2.7
  • Python 3.3
  • Ruby 1.9.3
  • MariaDB 5.5
  • MySQL 5.5
  • PostgreSQL 9.2
  • Node.js 0.10

Node.js のみ、テクニカルプレビューのようです。

これらが CentOS 6 で利用できるようになったようです。比較的バージョンの新しいものがあるので、自分でパッケージをビルドする必要がないので、便利ですね!

インストール方法は、とても簡単です。まず、Yum リポジトリを追加します。

$ sudo yum install centos-release-SCL

これをインストールすると、/etc/yum.repos.d/CentOS-SCL.repo ができます。

試しに Ruby 1.9.3 をインストールしてみましょう。

$ sudo yum install ruby193

そうすると、/opt/rh/ruby193 以下に Ruby 1.9.3 がインストールされます。
/opt/rh/ruby193/enable を読み込むと、PATH などを書き換えることができます。

$ source /opt/rh/ruby193/enable
$ ruby --version
ruby 1.9.3p448 (2013-06-27) [x86_64-linux]

手っ取り早く、上記のものを使いたいときは、とても便利ですね。
Ruby に限っては、2 系を追加してほしいところですね。

Tags:

Chef のパッケージをまとめてダウンロードする

February 11th, 2014 by naoya | No Comments | Filed in day

Chef のパッケージをインストールするとき、通常は次の方法が公式サイトにて紹介されています。

$ curl -L https://www.opscode.com/chef/install.sh | sudo bash

たしかにこの方法でインストールすることが出来るんですが、パッケージのあるサイトが海外の S3 のため、非常に遅いので、まとめてダウンロードするプログラムをさくっと書いてみました。

プログラムは、次のような感じです。
例えば、EL5 用のパッケージをダウンロードしたいときには、次のコマンドを実行するだけです。

$ ruby get_packages.rb el5

これで実行カレントディレクトリにパッケージがまとめてダウンロードされます。ただし、ベータ版や i386 パッケージは除外しています。
あとは、このパッケージをまとめて yum リポジトリとかにすると便利ですよね。


#
# get_packages.rb
#
require 'net/http'
require 'rexml/document'

case ARGV[0]
when 'el5', 'el6', 'deb'
package = ARGV[0]
else
p 'Usage: get_packages.rb '
exit 1
end

baseurl = 'opscode-omnibus-packages.s3.amazonaws.com'

# get the XML data as a string
xml_data = Net::HTTP.get_response(URI.parse('http://' + baseurl)).body
doc = REXML::Document.new(xml_data)

Net::HTTP.start(baseurl) do |http|
doc.elements.each('ListBucketResult/Contents/Key') do |v|
# x86_64 packages only, exclude rc git packages
next if v.text =~ /^.*(git|rc|alpha|beta).*$/
case package
when 'el5'
next if v.text !~ /^.*.el5.x86_64.rpm$/
when 'el6'
next if v.text !~ /^.*.el6.x86_64.rpm$/
when 'deb'
next if v.text !~ /^.*amd64.deb$/
end

package_name = File.basename(v.text)
next if File.exist?(package_name)

puts 'Downloading ' + v.text
resp = http.get('/' + v.text)
open(package_name, 'wb') { |file|
file.write(resp.body)
}
end
end
puts "Done"

Tags: ,

cobbler web を nginx 経由で使う方法の続き

February 10th, 2014 by naoya | No Comments | Filed in day

http://www.sssg.org/blogs/naoya/archives/2495 で紹介した方法ですが、肝心の /cblr/svc/ 以下の uswsgi の設定が抜けていたのでご紹介します。

まず、uWSGI が必要なので、コンパイルします。

今回は、1.9 系の最新版を使ってみます。

# yum install python python-devel libxml2 libxml2-devel python-setuptools zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake -y
# wget http://projects.unbit.it/downloads/uwsgi-1.9.21.1.tar.gz
# tar zxf uwsgi-1.9.21.1.tar.gz
# cd uwsgi-1.9.21.1
# python setup.py build
# make

make すると、カレントディレクトリに uwsgi プログラムができるので、これを利用します。

cobbler の /cblr/svc 以下や cobbler web 用の uwsgi は、次のコマンドで起動します。

# /usr/sbin/uwsgi --wsgi-file /var/www/cobbler/svc/services.py --socket 127.0.0.1:9090 --processes 4 --master --harakiri 120
# /usr/sbin/uwsgi --wsgi-file /usr/share/cobbler/web/cobbler.wsgi --socket 127.0.0.1:9091 --processes 4 --master --harakiri 120

手動で起動する場合は、supervisord を利用すると便利ですね。

これで、http:///cblr/svc/op/ks/system/s1 とかで、サーバの kickstart を参照できますね!

cobbler をインストールすると、Apache HTTPd も一緒にインストールされるので、ポートが競合しないようにしましょう。

Tags: ,

CentOS / Ubuntu でパワーセーブなどを無効にするスクリプト

January 27th, 2014 by naoya | No Comments | Filed in day

CentOS や Ubuntu で、サーバやローカルの仮想マシンとして構築したとき、自動的にディスプレイのパワーセーブに入ってしまいますよね。
そこで、それらを無効にするスクリプトを作成しました。

このファイルを、/etc/init.d/setterm で作成して実行権限をつけておきます。

ついでに、端末の背景色・前景色も設定してみました。

CentOS の場合は、次のような感じで登録しておけば便利です。

# chkconfig --add setterm
# chkconfig setterm on

Ubuntu の場合は、次のような感じでしょうか。

# update-rc.d setterm defaults

ただ近い将来、/etc/init.d/ がなくなるので、あまり長くは使えないとは思えます・・・。

Tags: ,

MySQL 5.6 をクライアントとして使うときに注意するポイント

December 21st, 2013 by naoya | No Comments | Filed in day

MySQL Casual Advent Calendar 2013 の 21 日目です。

早いもので、MySQL 5.6 が GA としてリリースされて、早いもので約十ヶ月くらい経っていますし、AWS RDS でも 5.6 がサポートされていますし、本番環境の MySQL サーバで 5.6 が稼働しているところが多いのではないでしょうか?

さて、とあるプロジェクトで CentOS 6.4 x86_64 上 Redmine を構築したとき、MySQL 5.6 をクライアントして使ったときにはまりました。

まず、dev.mysql.com から、公式の 5.6.15 の RPM を MySQL-devel パッケージをインストールして、redmine を展開して、bundle しました。


$ wget http://www.redmine.org/releases/redmine-2.4.1.tar.gz; tar zxf redmine-2.4.1.tar.gz
$ cd redmine-2.4.1
redmine-2.4.1$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/........
...
Installing mysql2 (0.3.14)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
checking for ruby/thread.h... no
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... no
checking for rb_hash_dup()... no
checking for rb_intern3()... no
-----
Using mysql_config at /usr/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
...
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld returned 1 exit status
make: *** [mysql2.so] Error 1
...

mysql2 がインストールできないようです。エラーの内容をよくみていると、mysqlclient のライブラリが見つからないようです。mysqlclient のライブラリは、MySQL-devel パッケージ場合、/usr/lib64/mysql にインストールされちえるため、mysql_config –libs した結果の「L/usr/lib64 -lmysqlclient -lpthread -lm -lrt -ldl
」では mysqlclient のライブラリが見つからないことが原因のようです。

これを直すには、直接 mysql_config を修正した方がよさそうです。MySQL Bugs #67851 として報告されていましたので、いつか直るといいですね。
/usr/bin/mysql_config を次のように修正しました。

--- /usr/bin/mysql_config-org 2013-12-20 12:11:54.708005529 +0900
+++ /usr/bin/mysql_config 2013-12-20 13:22:43.885004462 +0900
@@ -83,7 +83,7 @@
bindir='/usr/bin'

# If installed, search for the compiled in directory first (might be "lib64")
-pkglibdir='/usr/lib64'
+pkglibdir='/usr/lib64/mysql'
pkglibdir_rel=`echo $pkglibdir | sed -e "s;^$basedir/;;"`
fix_path pkglibdir $pkglibdir_rel lib/mysql lib

さて、この状態で bundle し直すと、ちゃんと gem はインストールできたようです。config/database.yml に MySQL サーバの設定をして、スキーマを投入してみました。

redmine-2.4.1$ rake db:migrate
'_rake' is correct? [n,y,a,e] n
rake aborted!
redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2/mysql2.so: undefined symbol: __cxa_pure_virtual - redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2/mysql2.so
redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2/mysql2.so
redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2.rb:8
redmine-2.4.1/config/application.rb:7
redmine-2.4.1/Rakefile:5
(See full trace by running task with --trace)

おや、mysql2 gem は正しくインストールされているはずなので、mysql2.so で undefined symbol エラーが発生しているようです。

Perl、Python、PHP、で簡単な MySQL サーバに接続するコードを書いてみましたが、いずれも問題なく動作しました。試しに C で書いたコンパイルところ(サンプルコードはこちら)、次のようなエラーがでましたので、とうも mysqlclient 側に問題があるようです。

$ gcc $(mysql_config --cflags) test.c $(mysql_config --libs)
/usr/lib64/mysql/libmysqlclient.a(client_authentication.cc.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
/usr/lib64/mysql/libmysqlclient.a(my_aes.cc.o): In function `~Mode_BASE':
/pb2/build/sb_0-10831761-1384711694.67/rpm/BUILD/mysql-5.6.15/mysql-5.6.15/extra/yassl/taocrypt/include/modes.hpp:64: undefined reference to `operator delete(void*)'
/usr/lib64/mysql/libmysqlclient.a(my_aes.cc.o):(.data.rel.ro._ZTVN8TaoCrypt9Mode_BASEE[vtable for TaoCrypt::Mode_BASE]+0x28): undefined reference to `__cxa_pure_virtual'

MySQL-devel パッケージを 5.5.35 にダウングレードして、mysql2 gem をインストールし直したあと、MySQL 5.6 にアップグレードすると、大丈夫なようです。。

redmine-2.4.1$ sudo yum downgrade /tmp/MySQL-devel-5.5.35-1.el6.x86_64.rpm
redmine-2.4.1$ rm -fr vendor/bundle
redmine-2.4.1$ bundle
redmine-2.4.1$ sudo yum install /tmp/MySQL-devel-5.6.15-1.el6.x86_64.rpm
redmine-2.4.1$ rake db:migrate
[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
== Setup: migrating ==========================================================
-- create_table("attachments", {:force=>true})
-> 0.8633s
...

このことから、どうも MySQL 5.6 の libmysqlclient に原因があるようです。

試しに Percona-Server-devel-56-5.6.15-rel63 で試したところ、別の Symbol エラーがでました。

redmine-2.4.1$ rake db:migrate
rake aborted!
redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2/mysql2.so: undefined symbol: __gxx_personality_v0 - redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2/mysql2.so
redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2/mysql2.so
redmine-2.4.1/vendor/bundle/ruby/1.8/gems/mysql2-0.3.14/lib/mysql2.rb:8
redmine-2.4.1/config/application.rb:7
redmine-2.4.1/Rakefile:5
(See full trace by running task with --trace)

しばらくの間は、Ruby などで使う可能性がある場合、クライアント側は、MySQL 5.5 の方がいいかもしれませんね。。。

追記1:
@yoshi_ken さんから、後方互換ライブラリ MySQL-shared-compat をインストールすることで /usr/lib64 以下に libmysqlclinet がインストールされるため解消するという情報があったのですが、僕が試した環境では、最初は 5.1 版の MySQL-shared-compat がインストールされている状態で試した結果は、上のような結果なのですが、MySQL-devel パッケージなどをすべて削除してから 5.5 版の MySQL-shared-compat をインストールして、MySQL-devel パッケージをインストールしても、mysql2 gem はインストールできない状況に変わりはありませんでした。

追記2:
さらに検証を進めたところ、MySQL-shared パッケージをインストールすることで、この問題は解消するようです。
まとめると、MySQL-shared と MySQL-shared-compat パッケージの2つが必要なようですね!
次のようなパッケージがインストールされていれば問題ありません。mysql コマンドが必要な場合は、MySQL-client パッケージをインストールすれば大丈夫です。

$ rpm -qa | grep MySQL
MySQL-shared-compat-5.6.15-1.el6.x86_64
MySQL-shared-5.6.15-1.el6.x86_64
MySQL-devel-5.6.15-1.el6.x86_64

明日 22 日目は、@akira1908jp さんです。

Tags:

EC2 c3.large が人気らしいというお話

December 3rd, 2013 by naoya | 1 Comment | Filed in day

今年の AWS re:Invent 2013 で発表された EC2 C3 ファミリーですが、かなり c1.medium / m1.medium からの移行などで人気があるようです。

EC2_Management_Console

僕も同じく、すこし遅めの対応でインスタンスの切り替えをしようとしたところ、次のようなメッセージが表示されていまいました。確認したので、東京リージョン ap-northeast-1a で非 default VPC 環境です。AWS の中の人に聞いたところ、c3.xlarge がまだ余裕があるみたいです。ap-northeast-1c ですと多少の余裕があって c3.large は起動するようです。ap-northeast-1a 側を使っている人がけっこう多そうな感じですね!

AWS といっても、当然ながら物理的なリソースの制限があるわけなので、AWS データセンターの中の人には頑張っていただきたい所存です。

早く、c1.medium や m1.medium から切り替えたいところですね。

参考:
Amazon EC2 で M1,C1 インスタンスを使ってる人は今すぐ C3 を使い始めよう – yoshidashingo

2013/12/20 追記
もう完全に東京では、枯渇してしまった様子ですね。来年あたり復活してから、c1/m1 からの切り替え祭りを実施したいと思います。

Tags: