2014年1月23日木曜日

Vagrant環境でMySQL5.6が起動しない?

VagrantでCentOS6.5でMySQLインストールしても起動しない・・・、
MySQL5.6だから?とかmy.cnfの設定がダメ?とかいろいろ考えすぎましたが、
デフォルトでも起動しないためそんなことはないようです。
ログには Cannot allocate memory・・・・と、
空きメモリーあるんだけどなと思いつつもinnodb_buffer_pool_sizeを小さくしてもダメでした。
[Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

対策

メモリー(物理)を増やすほど富豪ではなかったのでswap領域を追加してみることにしました。

swap領域の確認

swapon -s
Filename    Type  Size Used Priority
確かにありません・・・。

スワップ領域作成

容量は環境に合わせて適宜変更してください。
sudo dd if=/dev/zero of=/swapfile bs=1024k count=512
sudo mkswap /swapfile
sudo swapon /swapfile
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

再起動しても反映されるように修正

sudo vi /etc/fstab
# 次の行を追記
/swapfile swap swap defaults 0 0 

OSのスワップの利用頻度を低くする

できるだけスワップしない用に設定する(0〜100) 100の方が多くスワップ領域を使用する
vi /etc/sysctl.conf
vm.swappiness=10
sysctl -p 

これで無事にMySQL5.6が起動したのでいろいろ検証できます。
ちなみにPHPでもワーニング出ていたのが解消しました。
 PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/gd.so' - libvpx.so.0: cannot map zero-fill pages: Cannot allocate memory in Unknown on line 0
ここにもさりげなくCannot allocate memoryが。
ワーニング?・・・レベルなのかな・・・

2013年11月10日日曜日

Python 3.3.2でmysql-connector-pythonを試す

Python3.3.2でmysql-connnector-pythonを試してみました。

1. pipでインストール

pip install mysql-connector-python
pipではインストールできませんでした。ドキュメントでは3.1は対応しているようなのですが無理っぽいですね。
$ pip install mysql-connector-python
途中省略
error: invalid command 'egg_info'

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_user/mysql-connector-python
Storing complete log in /path/to/.pip/pip.log

2. MySQL Connector/Pythonを確認

ChangeLogを確認したところ
1.1.0の開発版からprint()文に変更されているので、Python3系の対応が行われているっぽい
http://dev.mysql.com/doc/relnotes/connector-python/en/news-1-1-0.html

いずれにせよ安定版ではないので、少しでもバグフィックが多い最新バージョンの1.1.2をインストールしてみます。
Changes in MySQL Connector/Python 1.1.2 (2013-10-23)

ちなみにまだリリースされていない1.1.3の情報では、sjisなどバックスラッシュ(0x5c)問題があるようなので、sjisを扱う場合は導入はまだ難しいようです。
Changes in MySQL Connector/Python 1.1.3 (Not yet released)

3. ソースコードでインストール

ソースコードはこちらから http://dev.mysql.com/downloads/connector/python/
curl -L -o mysql-connector-python-1.1.2.tar.gz "http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.1.2.tar.gz/from/http://cdn.mysql.com/"
tar zxfv mysql-connector-python-1.1.2.tar.gz
mysql-connector-python-1.1.2
python setup.py install

4. 動作確認

$ python
Python 3.3.2 (default, Nov  3 2013, 19:17:12)
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql.connector
>>> config = {
...    'user': 'username',
...    'password': 'password',
...    'host': '127.0.0.1',
...    'database': 'databasename',
... }
>>> cnx = mysql.connector.connect(**config)
>>> cur = cnx.cursor(buffered=True)
>>> cur.execute("SHOW STATUS LIKE 'Uptime'")
>>> print(cur.fetchone())
('Uptime', '678')
>>> cur.close()
True
>>> cnx.close()
簡単な動作確認ですが、動作しました。

2013年10月26日土曜日

Mac OS X 10.8 (Mountain Lion) -> 10.9 (Mavericks) アップグレードしてみた

新しいOSが出たらすぐにアップデート派なので、
発表されてすぐに10.8 (Mountain Lion) -> 10.9 (Marvericks)アップグレードしました。

当然新しいOSにはトラブルがつきもので、
もちろん覚悟はしていたのですが以外に無くてびっくりしています。
また機能的にはデスクトップやマルチモニタ環境の改善がすごく気に入っています。

が、しかし、100%問題無いということは無いので、アプリケーションの対応状況について実際に動作させて気になった点をご紹介いたします。

以下クリーンインストールではなく10.8からのアップデートという前提となります。

まずは致命的な所からのご紹介です。


Intel HAXM [×]

http://software.intel.com/en-us/forums/topic/477793

Intel HAXMのように致命的なものもあったりするので、仕事で使っているMacの場合は、使用しているアプリケーションが正式対応するまで待った方が安全かと思います。ちなみに実際に試してみましたがIntel HAXMを使用しているエミュレータ等を起動するとカーネルパニックになって電源OFF,ONしか復旧できません。Titanium MobileとかTizenなど開発に影響が出ているようです。

でも、こちらも中の人が反応してくれているので、
近いうちに10.9対応版がリリースするのではないかと思います。

追記 2013-10-29
Intel HAXM teamがMavericksとWindows8.1対応版をテスト中らしいです。

アンインストール方法

sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh

追記 2013-11-06
Mavericks用のhotfix(バージョン1.0.7)を適用したら動作しました。
http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager


MacPorts [△]
対応しているバージョンは、2.2.1以上ですね。
しかも、再ビルドが必要な場合が多いようです。
けっこうな手間ですが、今後のために再構築します。

ソースコード
https://distfiles.macports.org/MacPorts/MacPorts-2.2.1.tar.bz2
パッケージ
https://distfiles.macports.org/MacPorts/MacPorts-2.2.1-10.9-Mavericks.pkg

いろいろ問題はあるようでこちらにまとめられています。
http://trac.macports.org/wiki/MavericksProblems

ソースコードをビルドすると次のようにtclで止まります。おそらくオプションつければいけるとは思いますが、ここは素直にパッケージで導入しました。
checking for Tcl configuration... configure: error: Can't find Tcl configuration definitions

VMWare Fusion [△〜◯]

4系は動作しないという情報も目にしたのですが、私の場合は、動作しています。
WindowsXPもWindows8.1も動作上は問題ないですね。

追記 2013-10-29
既存環境が動作する分には問題ないですが、設定変更などができませんでした。

5系は、仕事用のMacで使用していて、こちらはまだアップデートしていないのですが、Marvericksのマルチモニタ機能には対応していないようですが、動作しないということはなさそうですね。
https://discussionsjapan.apple.com/message/100804960#100804960

6系で正式に対応ってことですね。

追記 2013-10-29
正式にMavericksとWindows8.1対応版がリリースされました。
http://t.co/y0Aazo1vyn

VirtualBoxとVagrant [◯]

以前バージョンでは下記のようなエラーが出て起動しませんでした。
こちらも最新バージョンにアップデートして解決しました。

VirtualBox 4.3
https://www.virtualbox.org/wiki/Downloads
追記 2013-11-02
インストーラに含まれるVirtualBox_Uninstall.toolで前のバージョンをアンインストールしてから4.3.2をインストールする

直らない場合は、次のコマンドで回避できそう。私の環境は不要でした。
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.plist

Vagrant 1.3.5
http://downloads.vagrantup.com/tags/v1.3.5

VirtualBoxバージョンアップ前
vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 68 of file VBoxManageHostonly.cpp

Vagrantバージョンアップ前
$ vagrant up
Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

プログラミング言語  [個人的に◎]

とりあえずバージョンをさらしてみます。
perl -v
This is perl 5, version 16, subversion 2 (v5.16.2) built for darwin-thread-multi-2level (with 3 registered patches, see perl -V for more detail)

php -v
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38)

python --version
Python 2.7.5

ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
個人的にはどれもすぐに開発で使えるバージョンですね。
こういうの地味に助かるんじゃないでしょうか。

あと、Chrome, Firebox, Safari, Dropbox, Evernote, Office2011, SublimeText, Coda2, mi, などなど・・・今のところ問題なくアッグレードはすごく満足度が高いものとなりました。



2013年10月14日月曜日

OSX CPU情報の取得

OSXでCPU情報を取得する機会があったのでメモ

sysctl -a | grep cpu

かなりいろいろな情報が取れるがいくつかを抜粋すると

物理コア数
hw.physicalcpu: 8

論理コア数
hw.logicalcpu: 16

ブランド名
machdep.cpu.brand_string: Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz

クロック数
hw.cpufrequency: 2260000000

system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: Mac Pro
      Model Identifier: MacPro4,1
      Processor Name: Quad-Core Intel Xeon
      Processor Speed: 2.26 GHz
      Number of Processors: 2
      Total Number of Cores: 8
      L2 Cache (per Core): 256 KB
      L3 Cache (per Processor): 8 MB
      Memory: 6 GB
      Processor Interconnect Speed: 5.86 GT/s
      Boot ROM Version: MP41.0081.B07
      SMC Version (system): 1.39f5
      SMC Version (processor tray): 1.39f5
      Serial Number (system): ****************
      Serial Number (processor tray): ****************
      Hardware UUID: ********-****-****-****-************
こちらは[ユーティリティ]->[システム情報]で参照できる情報に近いですね。
同じものを参照しているのかもしれません。

詳しくはこちら https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/system_profiler.8.html
CPU以外にも取得できるデータ型は次のコマンドで確認できます。
system_profiler -listDataTypes

Available Datatypes:
SPParallelATADataType
SPUniversalAccessDataType
SPApplicationsDataType
SPAudioDataType
SPBluetoothDataType
SPCameraDataType
SPCardReaderDataType
SPComponentDataType
SPDeveloperToolsDataType
SPDiagnosticsDataType
SPDiscBurningDataType
SPEthernetDataType
SPExtensionsDataType
SPFibreChannelDataType
SPFireWireDataType
SPFirewallDataType
SPFontsDataType
SPFrameworksDataType
SPDisplaysDataType
SPHardwareDataType
SPHardwareRAIDDataType
SPInstallHistoryDataType
SPNetworkLocationDataType
SPLogsDataType
SPManagedClientDataType
SPMemoryDataType
SPModemDataType
SPNetworkDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrefPaneDataType
SPPrintersSoftwareDataType
SPPrintersDataType
SPConfigurationProfileDataType
SPSASDataType
SPSerialATADataType
SPSPIDataType
SPSoftwareDataType
SPStartupItemDataType
SPStorageDataType
SPSyncServicesDataType
SPThunderboltDataType
SPUSBDataType
SPNetworkVolumeDataType
SPWWANDataType
SPAirPortDataType

system_profiler SPHardwareDataType

2013年10月5日土曜日

pip listのAssertionError

メモから再開する逆襲のエンジニアブログ

久しぶりにOSXでpython環境を作成したところ、
いきなりpip listでAssertionError

追記 2013-10-06 Debian 7.1でも同様のAssertionErrorを確認
$ pip list
distribute (0.6.49)
pip (1.4.1)
Exception:
Traceback (most recent call last):
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/basecommand.py", line 134, in main
    status = self.run(options, args)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 80, in run
    self.run_listing(options)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 127, in run_listing
    self.output_package_listing(installed_packages)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 136, in output_package_listing
    if dist_is_editable(dist):
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/util.py", line 347, in dist_is_editable
    req = FrozenRequirement.from_dist(dist, [])
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/__init__.py", line 194, in from_dist
    assert len(specs) == 1 and specs[0][0] == '=='
AssertionError

もうstackoverflowなしじゃ生きていけない・・・
http://stackoverflow.com/questions/18542633/pip-list-error-124-installing-on-mac-os-x

というわけで、distributeをアップデートして対策完了
$ pip install -U distribute

$ pip list
distribute (0.7.3)
pip (1.4.1)
setuptools (0.6c11)
stevedore (0.12)
virtualenv (1.10.1)
virtualenv-clone (0.2.4)
virtualenvwrapper (4.1.1)

2013年6月29日土曜日

これじゃないスタートボタン (Windows 8.1 Preview Build 9431)

Windows 8.1 Previewを試してみましたが、
先日の悲報通り、これじゃないスタートボタンでした。
日常的には使わない項目のオンパレードです。

やはり、期待していた従来の階層化メニューは実装されませんでした。
まだ、Previewなので今後の改善もあるかも・・・。

しかも、これボタンを右クリックしないと出てこないんですよ
左クリックするとメトロUIの「スタート画面」が出ます。
確かに7以前も管理系は右クリックでしたが。
これじゃない・・・。

あえて言うなら、サードパーティー的にはよかったんでしょうか。
Windows8のスタートメニューのシェア80%獲得しましたとか・・・。
そういう市場もあるんでしょうか。
ただし、無料に限り。
スタートメニューに広告掲載決定ですね。


起動時のスタート画面


ちなみに、スタート画面はデスクトップかどうか選べるオプションが増えているようです。
これもサードパーティは実装済みですが、デフォルトで設定できる点で改善されていると言ってよいかと思います。

既存の機能で階層化スタートメニューを実装してみた


とりあえず、今回のPreview版では階層化が実現しないので、
既存の機能で階層化メニューを作ってみました。

1. タスクバーを右クリックして[ツールバー]->[新規ツールバー(N)...]をクリックする


2. フォルダの欄に次のパスを入力して[フォルタの選択]ボタンをクリック

C:¥ProgramData¥Microsoft¥Windows¥Start Menu¥Programs

3. タスクバーにプログラムのメニューが作成されました

でも、これじゃないんだ・・・。
あまり便利な方法ではないので、サードパーティのスタートメニューアプリをインストールするのが不安な人は、こういう方法もあるのでご活用ください。



2013年6月11日火曜日

hooks/post-updateでsudoコマンドによるgit pull

hooks/post-updateでpullしようとしてちょっとはまったのでメモ 次のようにpost-updateを設定
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
sudo -u [user name|] git update-server-info
cd /path/to
sudo -u [user name|] git --git-dir=/path/to/.git pull

/var/log/secureに出力されるログ


git pushすると次のようなエラーがsecureログに出力されpullに失敗した。
sorry, you must have a tty to run sudo
sudoコマンドの実行にはttyが必要らしい・・・
ログインしていないと動かないということなのか?

/etc/sudoersの変更


sudoersの設定を見直したところ、それっぽいのがあった。
visudoで次の一行をコメントアウトでエラーが解消され動作しました。
#Defaults    requiretty

そういえば、そうだった気がする。