2013-05-18
■[Ruby] Ruby2.0.0 を CentOS6.4, OS X に 入れてみる
仕事ではここ数年ずっとPHPなので, プライベートではRubyにしようと.
PHPは別に嫌いじゃないですが, Rubyは書いてて気持ちがいいですね.
ということで, そろそろ2.0に移行しようと思って, 久々に環境構築をしたのでその備忘録です.
1. 前提条件
- OSのメジャーなパッケージ管理ソフトを使用する(CentOS は yum, mac は homebrew)
- rbenv + ruby-build で バージョンの切り替えができるように
- gem は プロジェクト毎にインストールしたいので, Bundler を利用する
2. rbenv + ruby-build + ruby のインストール
OS X (Mountain Lion) の場合
(1) rbenv + ruby-build
$ brew update $ brew upgrade $ brew install rbenv ruby-build $ cat << EOF >> ~/.zshrc export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" EOF $ source ~/.zshrc
(2) ruby を入れるのに必要なパッケージをインストール
$ brew install openssl $ brew link openssl --force $ brew install readline $ brew link readline --force $ brew install libyaml $ brew link libyaml --force
- --force を付けないと warning が出たのでつけています
$ ruby-build --definitions : : 1.9.3-rc1 2.0.0-p195 2.1.0-dev : : $ CONFIGURE_OPTS="--with-opt-dir=/usr/local/" rbenv install 2.0.0-p195 $ rbenv rehash $ rbenv versions * system (set by /Users/kopug/.rbenv/version) 2.0.0-p195 $ rbenv global 2.0.0-p195 $ ruby -v ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
CentOS 6.4 の場合
$ sudo yum -y install zlib zlib-devel readline readline-devel openssl openssl-devel curl curl-devel
(2) rbenv + ruby-build
# git clone git://github.com/sstephenson/rbenv.git rbenv # mkdir rbenv/shims rbenv/versions # git clone git://github.com/sstephenson/ruby-build.git ruby-build # cd ruby-build # ./install.sh
# cat << EOF >> /etc/profile.d/rbenv.sh export RBENV_ROOT="/usr/local/rbenv" export PATH="/usr/local/rbenv/bin:$PATH" eval "$(rbenv init -)"
# source /etc/profile.d/rbenv.sh
# ruby-build --definitions : : 1.9.3-rc1 2.0.0-p195 2.1.0-dev : : # rbenv install 2.0.0-p195 # rbenv rehash # rbenv versions * 2.0.0-p195 (set by /usr/local/rbenv/version) $ rbenv global 2.0.0-p195 $ ruby -v ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
3. Bundler の インストール
※ ~/.gemrc にある "custom_shebang directive" を削除してから以下を実行すること(途中でエラーになるため)
$ rbenv exec gem install bundler
$ rbenv exec gem list
*** LOCAL GEMS ***
bigdecimal (1.2.0)
bundler (1.3.5)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
test-unit (2.0.0.0)
$ rbenv exec gem which bundler
/Users/kopug/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler.rb
4. Railsのローカルインストール及びプロジェクト作成
$ cd ~/Work/projects $ cat << EOF > Gemfile source "http://rubygems.org" gem "rails", "バージョン(省略可能. その場合は最新版)" EOF
一時的にrailsプロジェクトを作成するために --path で指定した箇所に railsで必要なgemをインストール
$ bundle install --path vendor/bundle $ bundle list
プロジェクト名は example(適当), --skip-bundle を指定しておかないと, project作成時に勝手に bundle install が走って, global 環境にgemがインストールされてしまう
$ bundle exec rails new example --skip-bundle
プロジェクトが作成できたら, 以下は不要なので削除
$ rm -rf Gemfile Gemfile.lock .bundle vendor
ここでプロジェクトに必要なgem をプロジェクト配下にインストールをする
$ cd example/ $ bundle install --path vendor/bundle
git の管理からgemを外す
$ echo '/vendor/bundle' >> .gitignore
Rails Server 起動
$ bundle exec rails server
2012-11-11
■[sakura-vps] Ruby on Rails(RoR) 開発環境を構築する
久々の更新です。(毎回言っているが…^_^;)
Railsの開発環境を急遽構築したという事もあり, 備忘録がてらに残します.
1. 最新のパッケージに更新をする
$ sudo yum -y update
2. 必要なパッケージをインストールしておきます
$ sudo yum -y install gcc kernel-devel zlib-devel openssl-devel readline-devel curl-devel libyaml-devel sqlite-devel
3. Rubyのインストールをする
普段ならrpmでインストールをしようとするのですが, ebenvを使ってrubyのバージョン(環境)管理をします.
$ sudo git clone git://github.com/sstephenson/rbenv.git /usr/local/share/rbenv $ vi /etc/profile.d/rbenv.sh
export PATH="/usr/local/share/rbenv/bin:$PATH" export RBENV_VERSION="1.9.3-p327" export RBENV_DIR=/usr/local/share/rbenv export RBENV_ROOT=/usr/local/share/rbenv eval "$(rbenv init -)"
$ source /etc/profile.d/rbenv.sh
zsh を使っていると /etc/profile.d 配下を読み込まないので,以下を /etc/zprofileに追加
for i in /etc/profile.d/*.sh ; do
[ -r $i ] && source $i
done
ruby-build をインストールして, rubyをいれる
$ sudo git clone git://github.com/sstephenson/ruby-build.git /usr/local/src/ruby-build $ cd /usr/local/src/ruby-build $ sudo ./install.sh
$ sudo rbenv install 1.9.3-p327 $ sudo rbenv rehash $ sudo rbenv global 1.9.3-p327 $ sudo gem install bundler
$ sudo gem install rails unicorn
2012-03-18
■[sakura-vps][CentOS6.x] 1. さくらVPS CentOS6.2で基本設定をする
久々の更新です。
最近サーバ構築するのもスクリプトを流して終了…というのが多かったですが、久々に手動で構築したので備忘録として残します。
1. CentOS 6.2を再インストール
これはコントロールパネル(Web)でやったので省略…
2. etckeeper を入れて /etc配下をgitで管理
epel リポジトリが初めから入っていたのですんなり入った。
# yum -y install etckeeper # etckeeper init
3. 作業用ユーザの作成
rootで毎回作業するのは怖いので、作業用のユーザを作成して sudo権限を付けておく
# adduser kopug # passwd kopug # usermod -G wheel kopug
# visudo
# 以下のコメントを外す ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
作業用ユーザのSSH公開鍵を置いておく
※ ここからは作業用ユーザで繋ぎ直してから作業を行う
4. SSHの設定
4-1) デフォルトのポート番号を変更
$ sudo sed -i 's/^#Port 22/Port 10022/' /etc/ssh/sshd_config
4-2) rootでの接続をNG
$ sudo sh -c 'echo "PermitRootLogin no" >> /etc/ssh/sshd_config'
$ sudo sh -c 'echo "PermitEmptyPasswords no" >> /etc/ssh/sshd_config'
4-4) 鍵認証必須
$ sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
4-5) 設定反映
$ sudo /sbin/service sshd restart
※ ~/.ssh/authorized_keys に公開鍵を設定しておくこと
5. iptablesの設定
管理用のポートと, sshとweb以外は閉じておく
# /etc/sysconfig/iptables *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
あとはiptablesを再起動させ、デフォルト起動するようにしておく。
$ sudo /sbin/service iptables restart $ sudo /sbin/chkconfig iptables on
6. root宛のメールを受け取るようにする
メールアドレスの部分は置き換えてください(^_^;
$ sudo sudo sed -i '/^root:/d' /etc/aliases $ sudo sh -c "echo 'root: user@example.com' >> /etc/aliases" $ sudo newaliases
6. パッケージを最新版にする
$ sudo yum upgrade -y
7. etckeeper でcommitをしてサーバを再起動
$ sudo etckeeper commit $ sudo reboot
2011-04-23
■[subversion] いつも忘れるので覚書 - svnで外部リポジトリを含めたい場合 -
例えば、symfonyのとあるplugin(ここではsfHogePlugin)がsvnで管理されている場合、
$ cd sf_project_root $ export EDITOR=vim $ svn pe svn:externals plugins
sfHogePlugin http://<リポジトリURL>/branches/1.0.0
$ svn up
こうする事で、svn up をすると上記で追加されたリポジトリから取得してきます。
もちろんコミット権限があれば、コミットすることもできます。
2011-01-23
■[Linux][sakura-vps] さくらVPSのカスタムOSインストールでUbuntuを入れてみる #1
今までCentOSを使っていたけど、2011年からはUbuntuを使うことにする。
※ Mac OS X(10.6.6)のChrome(8.0.552.237)を使ってインストールをしようとしたところ、
VNCコンソールが正常に起動しなかったため、Firefox(3.6.13)を使用しました。(´・ω・`)
さくらインターネットVPSのコントロールパネルより、
OS再インストール > カスタムOSインストールへ のリンクを押下する。
1. この画面でOSの選択が可能になるので、ここでは"Ubuntu 10.04 amd64"を選択し、確認ボタンを押下
2. IPアドレス等の情報がでてくるので閉じないようにし、VNCコンソールを起動する
カスタムOSインストールガイド : Ubuntu 10.04
4. インストールが完了したら、コントロールパネルよりサーバを起動させ、Ubuntuのバージョンを10.10にアップグレードする
$ sudo sed -i 's/^Prompt=lts/Prompt=normal/g' /etc/update-manager/release-upgrades $ sudo do-release-upgrade $ sudo reboot
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 10.10 Release: 10.10 Codename: maverick
5. バージョンが10.10 になっているのを確認したら、パッケージのフルアップデートをします。
$ sudo aptitude full-upgrade $ sudo aptitude install build-essential
$ sudo locale-gen ja_JP.UTF-8 $ sudo /usr/sbin/update-locale LANG=ja_JP.UTF-8
7. sshの設定
$ mkdir ~/.ssh $ vi ~/.ssh/authorized_keys "自分の公開鍵を貼り付ける" $ chmod 600 ~/.ssh/authorized_keys $ chmod 700 ~/.ssh
$ sudo vi /etc/ssh/sshd_config
Port 22** PermitRootLogin no PasswordAuthentication no
$ sudo /etc/init.d/ssh restart
8. 適当に見繕ってパッケージをインストールする
$ sudo aptitude install zsh git-core git-svn subversion vim screen
9. iptables の設定
$ sudo ufw allow 22** <- ssh port $ sudo ufw allow 80 $ sudo ufw default deny $ sudo ufw enable $ sudo iptables -L <- ポリシーの確認
10. shellの変更
$ chsh -s /usr/bin/zsh
後は自分の好みで、.screenrc .vimrc .zshrc を配備する感じ。
参考
https://wiki.ubuntulinux.jp/UbuntuTips/DedicatedServer/Ufw
2010-12-18
■[symfony] symfony で普段使っているpluginをまとめてみた
この記事はSymfonyアドベントカレンダー2010の19日目です
1. sfWebBrowserPlugin - RESTful APIを利用するならお手の物。HTTP通信なら完全お任せ!
READMEを見ると利用方法が事細かに書かれているので非常に分かりやすいですね。
このpluginでは 3種類のインターフェイスをアダプターという形で用意しています。
- sfCurlAdapter
- sfFopenAdapter
- sfSocketsAdapter
どれを利用しても良いのですが、Forward Proxy経由でHTTPリクエストを送りたい事があるため、sfCurlAdapterを利用しています。
(例)
<?php $b = new sfWebBrowser(array(), 'sfCurlAdapter', array('httpproxytunnel' => 1, 'proxy' => 'http://proxy.example.com:8080', 'proxyport' => '8080', ) );
クラウド環境を利用していて、webサーバがオートスケールで増えてくれるのはいいけれども、振られるグローバルIPが何になるのか分からない場合などに使えますね!
※1. IPアドレスでの通信制限が無い場合は、気にする必要はないです。
※2. ロードバランサーがNATしてくれている場合は、気にしなくてもOK
2. sfDoctrineMasterSlavePlugin - DBのReplicationをするならまずこれでしょう!
Symfonyアドベントカレンダー2010の12日目にvectorxenonさんがsfDoctrineMasterSlavePluginの事を書かれております。
このpluginで何が1番嬉しかったかというと、マスターの分散が出来ることです。
# databases.yml all: # db1 connections db1_master: class: sfDoctrineDatabase param: dsn: mysql:dbname=db1;host:db1-master.example.com username: root password: ~ group: db1 db1_slave: class: sfDoctrineDatabase param: dsn: mysql:dbname=db1;host:db1-slave.example.com username: root password: ~ group: db1 # db2 connections db2_master: class: sfDoctrineDatabase param: dsn: mysql:dbname=db2;host:db2-master.example.com username: root password: ~ group: db2 db2_slave: class: sfDoctrineDatabase param: dsn: mysql:dbname=db2;host:db2-slave.example.com username: root password: ~ group: db2
selectの負荷はSlaveサーバを増やすことによって解決できますが、
更新系処理が多くなってくる場合、それでは対応できません。
上記のようにMaster and Slaveサーバのグループを用意し、schema.ymlで対応するconnectionを指定すればOKです。
# schema.yml User: connection:db1 columns: name: { type: string(255), notnull: true } LegacyUser: connection:db2 columns: name: { type: string(255), notnull: true }
3. sfAdminDashPlugin - 手軽にシャレオツ管理画面を提供したい場合に!
README に設定方法が書かれていますが、id:ken39argさんがsfAdminDashPluginがかなりいい件についてという記事で、ハマりどころも合わせて書かれています。
WEBサービスを作る上で管理画面って結構後回しにされがちですが、このpluginで手軽にシャレオツな管理画面が作れるので重宝しています。
4. sfTaskExtraPlugin - pluginを簡単に作るためのplugin
symfonyで幾つかProjectの開発をしていくと、必ずProject間で共通で利用したいコードが出てくると思います。
その時にplugin化をしたくなるのですが、pluginを開発する上で簡単で手軽にテストコードも準備できる枠組みを提供してくれるのがsfTaskExtraPluginです!
まずインストール
$ symfony plugin:install sfTaskExtraPlugin
これでREADMEに書かれているタスクを利用する事ができるようになりますが、特によく使うのは以下です。
- generate:plugin: pluginのスケルトンを吐き出す
- generate:plugin-module: モジュールを含むpluginのスケルトンを吐き出す
- plugin:package: 作成したpluginをPEARパッケージにしてくれます
symfony の pluginはPEARパッケージで管理しているので、これを使うといちいちpaclage.xmlを作成する必要がなくなります。
まぁそれも便利なのですが、一番素晴らしいのがTDDでの開発がすごくしやすくなることです。
実際にmyPluginを作成してみます。
$ symfony generate:plugin myPlugin
これだけで以下のスケルトンができます。
plugins/myPlugin
|-- LICENSE
|-- README
|-- config
| `-- myPluginConfiguration.class.php
|-- lib
|-- package.xml.tmpl
`-- test
|-- bin
| `-- prove.php
|-- bootstrap
| |-- functional.php
| `-- unit.php
|-- fixtures
| `-- project
| |-- apps
| | `-- frontend
| | |-- config
| | | |-- app.yml
| | | |-- cache.yml
| | | |-- factories.yml
| | | |-- filters.yml
| | | |-- frontendConfiguration.class.php
| | | |-- routing.yml
| | | |-- security.yml
| | | |-- settings.yml
| | | `-- view.yml
| | |-- i18n
| | |-- lib
| | | `-- myUser.class.php
| | |-- modules
| | `-- templates
| | `-- layout.php
| |-- cache
| |-- config
| | |-- ProjectConfiguration.class.php
| | |-- properties.ini
| | `-- rsync_exclude.txt
| |-- data
| | `-- fixtures
| | `-- fixtures.yml
| |-- lib
| | `-- form
| | `-- BaseForm.class.php
| |-- log
| |-- plugins
| |-- symfony
| |-- test
| | |-- bootstrap
| | | |-- functional.php
| | | `-- unit.php
| | |-- functional
| | `-- unit
| `-- web
| |-- css
| | `-- main.css
| |-- images
| |-- js
| |-- robots.txt
| `-- uploads
| `-- assets
|-- functional
`-- unit
上記を見てわかるとおり、殆どがテストのためのディレクトリ、ファイルになります。
※ plugin:packageをすると上記のテストディレクトリは除外されてパッケージされます。
テストコードの書き方は以下のドキュメントに詳しく書かれていますので、これでいつでもplugin開発ができますね!
5. sfMobileJPlugin - ガラケー対応サイトを作るのなら・・
手前味噌で恐縮ですが、仕事柄ガラケーのサイトを開発することがあるので、ガラケーに特化したpluginを公開しております。
使い方はREADMEにも書いていますが、簡単にご紹介すると、現在公開しているバージョンで出来ることは以下の2つです。
はい。それだけです。(ぉぃ)
一応それ以外にも細かなUtil classもあったりしますが、backendではNet_UserAgent_Mobileを使用しているので、端末の情報取得系はそちらが使えます。
現在公開準備中ではありますが、絵文字処理、携帯メール処理も上記pluginに含めれるようにコツコツと開発をしております。(^_^;
最後に
ここ一年くらいはサーバエンジニア系の仕事ばかりしていたので、中々コードを書く時間が無かったのですが、2011年はSymfony2ともっと一緒に遊びたいと思ってます!
それではまたよろしくお願い致します。
Symfony Advent 2010では12月1日から12月24日までを使って日替わりでsymfonyでイイなと思った小さなtipsから内部構造まで迫った解説などをブログ記事にして公開していくイベントです。
2010-09-18
■[Linux][nginx] CentOS5.5 x86_64 で 最新のnginx を rpmbuildする
EPELで実はnginxのrpmがあるんだけども、versionが0.6で止まっている。
なので、EPELからsrc.rpmを落としてきてそいつに最新のnginxをつっこんでbuildした。
EPELからnginxのsrc.rpmをダウンロードし、インストールする
# wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/SRPMS/nginx-0.6.39-5.el5.src.rpm # rpm -i nginx-0.6.39-5.el5.src.rpm
最新のnginxをDLし、SPECファイルを編集する
# cd /usr/src/redhat/SOURCES # wget http://nginx.org/download/nginx-0.8.50.tar.gz # cd ../SPECS/ # vi nginx.spec
versionを変更する
Version: 0.8.50
patchを当てないようにする
#Patch0: nginx-auto-cc-gcc.patch #Patch1: nginx-cve-2009-3555.patch #%patch0 -p0 #%patch1 -p0
LANG=C だとmakeでこけてしまうので、LANGを上書きする
%build
# nginx does not utilize a standard configure script. It has its own
# and the standard configure options cause the nginx configure script
# to error out. This is is also the reason for the DESTDIR environment
# variable. The configure script(s) have been patched (Patch1 and
# Patch2) in order to support installing into a build environment.
export LANG='ja_JP.UTF-8' <- 追加
export DESTDIR=%{buildroot}
TODO: rpmの仕様なのか、configureする前にLANG=Cにするみたいなので、上書きしているけど対応方法が強引すぎるため要調査
エラー内容は以下
make -f objs/Makefile
make[1]: Entering directory `/usr/src/redhat/BUILD/nginx-0.8.50'
gcc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Wunused-function -Wunused-variable -Wunused-value -Werror -g -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
cc1: warnings being treated as errors
src/core/nginx.c: In function 'ngx_set_user':
src/core/nginx.c:1101: warning: unused parameter 'cmd'
src/core/nginx.c: In function 'ngx_set_env':
src/core/nginx.c:1164: warning: unused parameter 'cmd'
src/core/nginx.c: In function 'ngx_set_priority':
src/core/nginx.c:1194: warning: unused parameter 'cmd'
src/core/nginx.c: In function 'ngx_set_cpu_affinity':
src/core/nginx.c:1234: warning: unused parameter 'cmd'
make[1]: *** [objs/src/core/nginx.o] Error 1
make[1]: Leaving directory `/usr/src/redhat/BUILD/nginx-0.8.50'
make: *** [build] Error 2
+ mv nginx-upstream-fair/README nginx-upstream-fair/README.nginx-upstream-fair
mv: cannot stat `nginx-upstream-fair/README': No such file or directory
+ exit 0
パッケージにファイルが含まれてないといわれるので、無視するようにする
%define _unpackaged_files_terminate_build 0
※ %filesに含めたほうがいいかも。
buildする。src.rpmも作成しておく
# rpmbuild -ba nginx.spec
# rpm -i /usr/src/redhat/RPMS/x86_64/nginx-0.8.50-5.x86_64.rpm
■[Linux] よく使うyumリポジトリ
言わずと知れたRPMforge
- i386 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
- x86_64 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt # rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm
CentOS(RHEL)でもFedoraのパッケージが使いたいときはEPEL
- i386 http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/i386/epel-release-5-3.noarch.rpm
- x86_64 http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/x86_64/epel-release-5-3.noarch.rpm
# rpm --import http://ftp.iij.ad.jp/pub/linux/fedora/epel/RPM-GPG-KEY-EPEL # rpm -i epel-release-5-3.noarch.rpm
PHPやMySQLの最新版を使いたい。どこよりも早く、最新のバージョンをパッケージングしてくれるremi
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm # rpm -i remi-release-5.rpm # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
■[Linux] CentOS 5.5 x86_64 に checkinstall を入れてみる
以前はrpmforgeにパッケージがあったと思ったけど、どうやら無くなっている?
仕方が無いので、ソースからインストールし、その後checkinstallを使ってrpmにする。
# cd /usr/local/src # wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz # tar zxf checkinstall-1.6.2.tar.gz # cd checkinstall-1.6.2 # make # make install
x86_64なので、本来installwatch.so は lib64に入ってほしいんだけど、libに入っている。
makefileを書き直してもいいけど、今回はシンボリックリンクで対応。
# ln -s /usr/local/lib/installwatch.so /usr/local/lib64/installwatch.so # checkinstall
適当に質問に答えていき、rpmができたらそいつをインストールしておく
# rpm -i /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm # rpm -qi checkinstall
Name : checkinstall Relocations: (not relocatable)
Version : 1.6.2 Vendor: (none)
Release : 1 Build Date: 2010年09月18日 18時18分48秒
Install Date: 2010年09月18日 18時19分01秒 Build Host: rpmbuilder
Group : Applications/System Source RPM: checkinstall-1.6.2-1.src.rpm
Size : 457305 License: GPL
Signature : (none)
Packager : checkinstall-1.6.2
Summary : CheckInstall installations tracker, version 1.6.2
Description :
CheckInstall installations tracker, version 1.6.2
CheckInstall keeps track of all the files created or
modified by your installation script ("make install"
"make install_modules", "setup", etc), builds a
standard binary package and installs it in your
system giving you the ability to uninstall it with your
distribution's standard package management utilities.
これで完成。
■[仮想化] VirtualBox で イメージの複製
vboxmanage clonehd D:\vm\centos5\Base.vdi D:\vm\centos5\NewHardDisk02.vdi
絶対パスでファイルを指定しないとERRORになった。
ERROR: Cannot register the hard disk 'D:\vm\centos5\Base.vdi' with UUID
{*******-****-****-****-************} because a hard disk 'D:\vm\centos5\Base.vdi'
with UUID {*******-****-****-****-************} already exists in
the media registry ('C:\Users\kopug/.VirtualBox\VirtualBox.xml')
Details: code E_INVALIDARG (0x80070057), component VirtualBox, interface IVirtua
lBox, callee IUnknown
Context: "OpenHardDisk(Bstr(szFilenameAbs), AccessMode_ReadWrite, false, Bstr(""
), false, Bstr(""), srcDisk.asOutParam())" at line 633 of file VBoxManageDisk.cp
p
VBoxManage コマンドは デフォルトインストールだとこちらに。
C:\Program Files\Oracle\VirtualBox\
2010-09-17
■[仮想化] xenが重くなったときに試してみる事
xenに限った事じゃないけど、イメージファイルをSparseにしている場合、
I/O負荷が馬鹿にならない。
そんな時には思い切ってSparseをやめてみる。
cp --sparse=never 元イメージファイル 新イメージファイル
ファイルサイズによっては結構時間がかかるけど。
終わったら ls -s で見ると実ファイルと同じサイズになっているのが分かる。
■[仮想化] Xenのディスクイメージファイルサイズを増やす
開発環境はxenで構築しているんだけど(kvmに移行を考え中)、そこのディスク容量が少ないから何とかしてーと言われたので何とかした時のメモ
前提条件
※ イメージファイルはSparseじゃない
※ ゲストOSで LVMを利用している
DomainU(ゲストOS)を停止
# xm shutdown <name>
イメージファイルをバックアップ
# cd /var/lib/xen/images/ # mv <name>.img <name>.img.bak
空の20Gのイメージを作成し、結合(ここが重いけど我慢)
# dd if=/dev/zero bs=1M count=0 seek=20480 of=./20G.img # cat <name>.img.bak 20G.img > <name>.img # chmod 755 <name>.img
ループバックデバイスを設定
# losetup -f /dev/loop0 # losetup /dev/loop0 ./<name>.img # losetup -a /dev/loop0: [fd00]:61014051 (<name>.img)
マウントしたイメージファイルのoffsetを確認
# fdisk -lu /dev/loop0 Disk /dev/loop0: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = セクタ数 of 1 * 512 = 512 bytes デバイス Boot Start End Blocks Id System /dev/loop0p1 * 63 208844 104391 83 Linux /dev/loop0p2 208845 20964824 10377990 8e Linux LVM
fdiskで対象のスライスを削除し、シリンダサイズを再設定
# fdisk /dev/loop0 このディスクのシリンダ数は 1305 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) コマンド (m でヘルプ): d 領域番号 (1-4): 2 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 2 最初 シリンダ (14-6527, default 14): Using default value 14 終点 シリンダ または +サイズ または +サイズM または +サイズK (14-1305, default 1305): Using default value 1305 コマンド (m でヘルプ): t 領域番号 (1-4): 2 16進数コード (L コマンドでコードリスト表示): 8e 領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 警告: 領域テーブルの再読込みがエラー 22 で失敗しました: 無効な引数です。 カーネルはまだ古いテーブルを使っています。 新しいテーブルは次回リブート時に使えるようになるでしょう。 ディスクを同期させます。
ループバックデバイスを削除
# losetup -d /dev/loop0
DomainU(ゲストOS)を起動
# xm create <name>
以下ゲストOS内で
# pvscan # pvresize /dev/xvda2 # pvscan # lvscan # lvresize -L +20G /dev/VolGroup00/LogVol00 # resize2fs /dev/VolGroup00/LogVol00 # df -h
2010-01-18
■[symfony] genURL()でQueryStringをパス形式にしたくない場合
id:bucci-r に教えてもらった。
symfonyってデフォルトだと以下のようなクエリストリングをつける場合
?a=A&b=B
/a/A/b/B
ってしちゃうんだよね。これを普通にクエリストリングで渡すことができるっぽい!
extra_parameters_as_query_string in factories.yml
ただハマリどころが一点あって、ここにも書いているように
ルート生成に使われていないパラメーターをクエリ文字列に変換することが可能です。
とあります。これって以下が該当するんだよね。
routings.yml
default: url: /:module/:action/*
これがデフォルトだと必ず書いてあるので、上のアスタリスクのせいで、必ずルート生成に利用されちゃう。
"*" を取ってあげると希望する動きになるっぽい!
2009-12-07
■[symfony] ControllerのURI PATHのPrefixにごにょごにょしたい場合
Reverse Proxy経由で複数のapplicationを動かしたいってことは良くあると思うんだが、
その時に http://example.com/application -> http://application.backend.local/ みたいな事をすると、
PATHがfrontendとbackendで異なるのでめんどくさい事がある。よね?
2009-10-12
■[PostgreSQL] PostGISを使う
http://d.hatena.ne.jp/kopug/20091011/1255240821
上記のエントリでPostGISのインストールについて書いたが、今度は実際に使ってみる
やりたい事としては以下のとおり
1. DBの作成
$ createdb -U postgres -T template_postgis geomanse
2. テーブルの作成 (※1)
$ psql -U postgres geomanse
CREATE TABLE SAMPLE (id serial);
SELECT AddGeometryColumn('sample', 'point', 4326, 'POINT', 2);
※1 4326って何さ?
# 実際には SELECT * FROM spatial_ref_sys WHERE srid=4326 を参照している事を意味するようです
3. データを突っ込む
東京都港区芝公園4丁目2−8の緯度、経度を突っ込む場合(WGS84)
GeomFromText('POINT(35.658671 139.7454)', 4326)
INSERT INTO SAMPLE (point) VALUES (GeomFromText('POINT(35.658671 139.7454)', 4326));
4. 任意の緯度、経度からの距離を求める
SELECT ST_Distance(point, GeomFromText('POINT(35.681382 139.766084)', 4326)) FROM SAMPLE;
ただこの単位だと度になっていると思われるので、メートルにする場合はまた次回で。


