個人設定あれこれ晒す@linux

.bashrc

bashを使うのであれば、まぁ以下の設定くらいかな。

# ~/.bashrc
PS1="\[\033[01;36m\][\u@\h:\W] \\$ \[\033[00m\]"

コマンド入力待ちの際に表示されるあれw。(水)色付けて太字にして「[アカウント名@ホスト名:現在のディレクトリ] $ 」と表示させる。
これで複数のサーバに接続とかしている場合はサーバごとに色分けして、常に自分がどのサーバに接続しているかわかる。
「\[\033[〜〜m\]」で色やフォントの太さなんかを変えられる。〜〜に設定を記載する。複数設定する場合は、数値毎に「;」を挟む。

設定値 意味
00 全てを元に戻す
01 太字にする
30
31 赤色
32
33
34 黄色
35
36 水色
37

後はバックスラッシュ[\(フォントによっては円マーク)]と文字の組み合わせで色々表示できる

文字 意味
u ログインユーザ名
h ログインホスト名
W 現在のディレクトリ名
w 現在のフルパス

何かよく使うコマンドがあれば、alias="〜" で追記すればいいかな。
これは接続先のサーバによって変わるから省略。

.vimrc

vimエディタ使うなら、これくらいの設定しておけば、便利に使えるかな。
宗教論争てきな他のエディタなんぞは知らん(キリッ

" ~/.vimrc
"-------------------
"  インデント関連
"-------------------
set tabstop=4
set expandtab
set shiftwidth=4
set autoindent
set cindent
set showmatch

"-------------------
"  表示関連
"-------------------
syntax on
set number
set ruler
set title
set laststatus=2

highlight Search cterm=reverse,bold ctermfg=6 ctermbg=5
highlight StatusLineNC cterm=reverse ctermfg=4 ctermbg=0
highlight StatusLine cterm=reverse,bold ctermfg=4 ctermbg=3

インデント関連で、タブをスペース4個入力にして、ソースコードの時なんかに自動でインデントするように設定。
表示関連で、行番号・ルーラー・タイトル・ステータスバー表示させる。これでステータスバーに開いているファイル名やカーソルの位置が常に表示されるぞ。
後は、highlightでステータスバーなんかの色を個別指定。

.screenrc

スクリーンコマンドを実行した際の個人設定ファイル。
サーバなどにコンソールで接続している時にすごく便利なスクリーンコマンド。
インストールされているサーバであれば実行必須。途中でネットワークが切断してもコネクションを保持してたり、単一のコンソール画面に何枚もタブのように切り替えられたりで、メリットだらけw
ホームディレクトリ配下に以下の内容の設定ファイルを配置

# ~/.screenrc
escape ^T^T
hardstatus alwayslastline "%{r wm}%01=%H >> %{+b kM} %`%-w%{ wb} %n %t%{-}%+w %-040=%{-b wm}| %l | %Y/%m/%d %C %A"

まず、通常[Ctrl]+[a]キーでスクリーン操作を開始するところを[Ctrl]+[t]キーに変更する。
これは他のアプリケーションで[Ctrl]+[a]が使用されていたりする場合がある為衝突しないように。
次のhardstatusは、スクリーンを立ち上げた時にステータスバー的な表示をさせる。
表示内容は「ホスト名 >> 起動しているスクリーン番号 名称... | ロードアベレージ | 日時」となる。

ステータスバー表記内容

表記 意味
%0`, %1`, ... backtickのidによる出力
%{=b cw} ANSIエスケープコードによる書式設定例(太字 シアンの背景に白文字)
%{b c}のように片方の指定では前景色として指定される
blac[k] [r]ed [g]reen [y]ellow [b]lue [m]agenta [c]yan [w]hite (大文字で明るい色になる)
%{-}, %{--} 書式解除
%a am/pm
%A AM/PM
%c 24h表記の時・分
%C 12h表記の時・分
%d 月の中の日
%h X端末のウィンドウタイトル(シェルからの出力部分)
%H ホスト名
%l system load
%m 月(01-12)
%M 月(1-12)
%n アクティブなウィンドウの番号
%s
%t タイトル
%-w 現在アクティブなウィンドウ番号より小さいウィンドウの番号 タイトル一覧
%+w 現在アクティブなウィンドウ番号より大きいウィンドウの表示部分
%w 現在アクティブな番号/タイトルに「*」を付けた全ウィンドウリスト
%y 西暦年(2桁)
%Y 西暦年(4桁)

Ubuntu11.10とPHP5とEclipseとSubversion

PHPの開発をするのにお勧めな総合開発環境がEclipseとPDTプラグイン
Java開発に優れているエディタEclipse。これにPHP開発環境用のPDTプラグインを入れるとかなりいい感じ。
PHPと密接なWEB(JavaScript,HTML,CSS)なんかも対応しているのでいいよね。
開発用エディタとしての基本色分け表示をしてくれるし、シンタックスエラーなんかも見つけてくれる。
しかも、関数やメソッドなど呼び出している個所を[Ctrl]キー押しながらクリックすると、定義してある個所を(プロジェクト内に存在していれば別ファイルでも開いて)表示してくれる優れもの!!
vimなんかも好きだけど、大量のソースファイルとかあるとこちらの方がお勧め。

EclipseとPDTプラグインをUbuntu11.10にインストールするぜ

Ubuntuの apt-get install コマンドから eclipse がインストールできるんだけど、それだと64bit環境ではPHP開発用のプラグインが「Install New Software...」メニューからインストールできない(エラーがでる)。
なもんで、自分でダウンロードしてきて使えるようにする。
まずは下記サイトに行ってPDT(EclipsePHP開発用プラグイン)が実装されたオールインワンのEclipseパッケージを落とす。

http://www.eclipse.org/pdt/downloads/

ここにある「Eclipse PDT 2.2.0 All In Ones / Eclipse PHP Package」から該当するパッケージをダウンロードする。
現時点ではPDT2.0.0でEclipseは3.6だったが、都度最新版が表示されるのでその時の最新版を落とすとよい。
今回は64bitのUbuntuに入れたいので「All-In-One Linux x86/GTK 2 64-bit」をダウンロード。

落ちるまで待つ。これ大事。でも・・・別に他の事しててもいいんだよ?

無事ダウンロードが完了したら、圧縮ファイルを展開(解凍)する。そうすると、eclipseと言う名のディレクトリが生まれる。
その生まれたeclipseディレクトリを /usr/local/ 内に移動する。
これで、/usr/local/eclipse/eclipse から実行できる。でも毎回毎回コマンド叩くもしくはGUIでフォルダ開いていくのめんどいね・・・
てことで、このショートカットをデスクトップに置いておけば楽ちんぽん。
該当のファイルを「Alt」キー押しながらデスクトップにドラッグするとショートカットアイコンを作成できる。
Ubuntu11.10であれば、左側のランチャー(かな?)に登録するのもいいね。

ちなみに。32bit版のUbuntu11.10では

sudo apt-get install eclipse

で本体をインストールした後に、
「Help」メニューの「Install New Software」を開き、表示されたダイアログの「Work with:」から「Helios - http://download.eclipse.org/releases/helios*1」を選択。
項目がなければ「Add...」で名前とURLを登録する。
暫くして表示されたリストから、「Web,XML.Java EE and 〜〜」のサブ階層にある「PHP Development Tools (PDT) SDK Feature」 をチェックして「Next>」
途中でライセンス確認が出たら「I accept the terms of the license agreement」を選ぶ。
インストールが終了すると、Eclipseの再起動を要求してくるので再起動して完了。

SubversionEclipseソースコード管理

世の中Git最強とか騒がれているけど、まだまだSubversionが現役。Subversiveプラグインを入れて、EclipseからSubversion連携をさせる。

まずは「Help」メニューから「Install New Software」を選択。
表示されたダイアログの「Work With:」項目から「Helios - http://download.eclipse.org/releases/helios」を選択。
暫くして表示された一覧の「Collaboration」から次の二つをチェックして「Next>」(「type filter text」にsubversiveと入力すれば見つけやすい)

インストール作業が始まり、途中でライセンス確認がでたら「I accept the terms of the license agreement」を選んで承諾して最後に「Finish」クリック。
最終でEclipseの再起動を聞かれるので「Now」を選んで再起動する。

SVNコネクタインストール

次に、ライセンスの関係で別になっているSVNコネクタをインストールする。
Eclipse再起動後、もしくはSubversionの機能を使おうとすると、コネクタのインストールダイアログが表示される。

最新版の SVN Kit を選択すれば問題なし。JavaHLは別途必要な人だけで(SVNだけなら必要なし)。

先ほど同様、ライセンス確認が出るので「I accept the terms of the license agreement」で承諾する。
Eclipseの正式プロジェクトで無い為か、「Security Warning」が出てしまうが「OK」を押せばインストールできる。



Eclispeで作成しているプロジェクト内のソースを、既にsubversionで管理していた場合は
該当のプロジェクトアイコン右クリックし、TeamメニューからShare Project選択
で簡単にリポジトリ情報などを引き継げる。アクセスするユーザー情報などを入力するだけ。

*1:Eclipse本体のバージョンがIndigo(3.7.x)の場合は「Indigo - http://download.eclipse.org/releases/indigo

Ubuntu11.10をVirtualBoxにインストールした後にする事

Ubuntuを起動してまず初めにする事はログインw
まぁ、これは当たり前として、ログインしたら次の処理を実行する

Guest Additionsのインストール

  1. VirtualBoxの「デバイス」メニューから「Guest Additionsのインストール」を選択する
  1. VirtuakBox上で起動しているUbuntuのデスクトップにCDのアイコンが追加される
    • VBOXADDITIONS_4.1.4_74291 で表示される(数字はバージョンによって異なると思われる)
  1. ターミナル立ち上げ
  1. 以下のコマンド実行
$ cd /media/VBOXADDITIONS_4.1.4_74291/
$ sudo sh VBoxLinuxAdditions.run
    1. まずsudoコマンドでパスワードを聞かれるので、ログインしているアカウントのパスワード入力
    1. 途中の処理状況が表示されていくので待つ
    1. 最後に Installing graohic libraries and desktop services components ... done. と表示されて終了

Guest Additionsのインストール作業がうまくいかない場合は、下記の方法もある模様。

sudo apt-get install virtualbox-ose-guest-utils

Unityを使う

Ubuntu11.04の特徴的な機能であるUnityを使う。UnitiyとはデスクトップのUIがちょっとMac的になるあれw
その環境で使えるかの確認は以下のコマンドで確認。

$ /usr/lib/nux/unity_support_test -p
OpenGL vendor string:   Humper
OpenGL renderer string: Chromium
OpenGL version string:  2.1 Chromium 1.9

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       yes

Guest Additionsがインストールされた状態でVirtualBoxのディスプレイ項目で「3Dアクセラレーション」が有効になっていればUnity3Dが使用できます。

VMWarePlayer4.1では、3Dアクセラレーションを有効にしてもUnity3D対応できませんでした。
その場合はUnity2Dなるものが代わりに動いてくれます。

カーネルの更新時の対処方法

(2011/12/19追記)
アップデートマネージャーなどから更新を行った際、カーネルがアップデートされると Guset Additions が無効になる。
そうなってしまった場合は、再度インストールすれば解決する。
だが、いちいち再インストールはめんどくさいので・・・

sudo apt-get install dkms

コマンドで Dynamic Kernel Modules Support をインストールする。
そうすれば、カーネル更新後のreboot中にモジュールなどを自動で再構成してくれるようだ。

余談

VirtualBoxのゲストに元々11.04を入れてたのを11.10にアップグレードしたら動かなくなった。
なので、11.10をクリーンインストールした。
VMWarePlayer4.1で同様にアップグレードしたら、デスクトップへのログインが4〜5回に1回しかできなくなった。
駄目なときはフリーズするけど、SSHからの接続は可能だった。原因不明。

詳細設定とシステムフォントの変更

Ubuntu11.10をインストールした直後の日本語の表示が変。変ていうより汚い。
日本語Remix版だとまぁ見れるんだけど、本家の http://www.ubuntu.com/ から入手したUbuntuはもうね・・・
なんだか中国語みたいな感じのフォントが使用されている。
ぜっかくunityで新しいUIなのにこれじゃぁ・・・

VLゴシックフォントに変えて見た目を美しくしよう作戦決行!

VLゴシックはパッケージ化されてるから簡単インストールできちゃう!

ターミナルらかコマンドでインストール

以下のコマンド叩くだけ〜

sudo apt-get install ttf-vlgothic

sudoコマンドはroot権限で実行するためのコマンド。インストールするには必要なコマンド。
root権限で実行するコマンドがapt-getで、パラメータにinstall渡してインストールしちゃう!
インストールするのはttf-vlgothicってパッケージ、つまりVLゴシックフォントって事。

このコマンドを実行しただけで、あれまぁ。
勝手にシステムフォントまで入れ替わってきれいで読みやすい日本語に大変身。こりゃ楽だ!

Ubuntuソフトウェアセンター(GUI)からインストール

ターミナルって何?コマンドっておいしいの?って人向けに、マウスとか使ってインストールする方法。

  1. デスクトップ左側にあるバーに並んだアイコンで、オレンジの紙袋みたいなアイコン「Ubuntusソフトウェアセンター」起動
  2. 検索(虫眼鏡マークのある)フォームに「ttf-vlgothic」と入力
  3. VineLinuxによる日本語TrueTypeフォント」が絞り込まれているのでマウスで選択(クリック)
  4. インストールボタンがあるのでクリックしてインストール開始。
    • パスワード聞かれたりするから答えちゃおう!

参考用にスクリーンショット。ちょっと違う物(次の内容)をインストールする時のものです。

デスクトップの詳細設定

上記方法でインストールしたけどシステムフォントが自動で切り替わらなかったり、既にインストール済みのフォントにしたい場合の方法。
画面左側のランチャ(名前知らんw)から「システム設定(歯車とスパナ工具のアイコン)」からの「外観」からの「フォント」ってあれ?
設定が出来なくなっているではないか!!!

Ubuntu11.10からは「Advanced Setting」をインストールしないと詳細設定が出来なくなっているらしい。初心者向け??
早速インストールしよう!

  1. Ubuntuソフトウエアセンター(これまた左側のランチャーにある)起動
  2. 検索フォームに「gnome-tweak」と入力
  3. 「Advanced Setting」が絞り込まれているのでレッツインストール

インストールが終わったら、早速よびだしてみようず。

  1. 左側アイコンの一番上のUbuntuマーク的なアイコン「Dashホーム」クリック
  2. 検索で「高度な設定」とやれば絞れるよ。
  3. 高度な設定を開いてフォントを選択。
  4. 「Default font」をお気に入りのフォントにすれば、メニューなどなどフォントが変わる。

apacheが起動しない…だと!?

VMWare PlayerでUbuntu11.04からUbuntu11.10にバージョンアップした。
Ubuntuは問題なく起動できたけど、VMではUnityは3Dではなく2Dしか使えないようだ・・・

まぁ、それはいいとしてだ。
Webサイト構築用にapacheサーバを組み込んであるんだけど、ブラウザでアクセスできなくなった。

$ /etc/init.d/apache2 status
Apache2 is NOT running.

あぁ、apacheが起動してないのか!

$ sudo /etc/init.d/apache2 start

下記のエラーを出して見事に失敗orz

 * Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

誰だよ!?80番ポート使ってる奴は!!(怒

$ sudo lsof -i:80
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 1530 root    3u  IPv4   7800      0t0  TCP *:www (LISTEN)


むむ。
apacheが既にポートを使用しているだと??
可笑しいな・・・アクセス出来ないんだけど・・・apacheのゾンビプロセスがいるのかいな。
起動しただけで、特に何もしていないんだが・・・まぁよし。さよならだ。

$ sudo kill -2 1530

これでapacheが無事起動した。

ちょっと思った。起動したときに秘密キーのパスワードを求められた。
オレオレ証明書使ってるので、自分でキーを生成してあるんだが。
パスワード指定しなくても起動できるようにしようと思ってそのまま放置だったんだが・・・犯人はこれか!?

何れ分かったら追記しよう。

embedFormしたフォームオブジェクトの動的schema設定

とあるフォームオブジェクトから別のフォームオブジェクトをマージするような形式で使える便利な::embedForm()メソッド
そのまま使うんであれば特に問題ないのだけれども、動的にスキーマやバリデータを変更したい時とかが厄介なのでメモしとこ。

symfony 1.x legacy websiteでのProductPhotoFormのスキーマを呼び出す方法。

<?php
// lib/form/doctrine/ProductForm.class.php

/**
 * ProductPhotoのウィジェット取得
 * @param Int $i newPhotoウィジェットが保持する配列キー
 * @param ProductPhotoのウィジェット配列名
 */
public function getProductPhotoWidget($i, $name)
{
    // newPhotoウィジェットが持つウィジェット取得
    $widget = $this->getWidget('newPhoto')->getFields();

    // $keyをキーとするwidgetがなければFALSEを返す
    if (!isset($widget[$i])) {
        return FALSE;
    }

    // キーが$keyのウィジェット取得
    $widget = $widget[$i]->getFields();

    // $nameをキーとするwidgetがなければFALSEを返す
    if (!isset($widget[$name])) {
        return FALSE;
    }

    return $widget[$name]->getFields();
}

ループの最初に生成されたcaptionウィジェット(構成はここを参照)を取得するには、

<?php
$form = new ProductForm();
$widget = $form(0, 'caption');

とすれば取得できる。取得した$widgetから$widget->setOption()などのメソッドが使用できるようになる。
今回作成したメソッド内にある $this->getWidget('newPhoto') を $this->getValidator('newPhoto') に変えればバリデータが取得できる。

HTTP_Request2 でのSSL通信でのPOST送信

オレオレ証明書を使用しているサーバへHTTP_Request2を使って通信をする時にちょっと悩まされたのでメモ。
デフォルトの設定で実行すると、エラーコード0を返してきて原因解明までに無駄な時間を要したのでここにメモ。

hoge='fuga' の値を https://foo.barPHPから送信してXMLデータを取得。
ただし、foo.barはオレオレ証明書(自己証明書)であるため、ちょっとした設定が必要。
キーとなるのは

<?php
// SSLサーバ証明書の検証を要求するか(デフォはtrue)
HTTP_Request2::setConfig('ssl_verify_peer', false);

// 自己証明書を許可するか(デフォはtrue)
HTTP_Request2::setConfig('ssl_verify_host', false);

以上の点を踏まえて対応したコードが以下の通り。
リクエスト送信してXMLデータを取得するまでのコード。
バーチャルホストで foo.bar 設定されてるけど、DNSで解決できないのでIPアドレスで指定する方法もついでに記載。

<?php
$request = new HTTP_request2();

// SSLサーバ証明書の検証を要求するか(デフォはtrue)
HTTP_Request2::setConfig('ssl_verify_peer', false);

// 自己証明書を許可するか(デフォはtrue)
HTTP_Request2::setConfig('ssl_verify_host', false);

// 接続先URL設定
$request->setUrl('https://192.168.0.1/');

// VirtualHost用にヘッダーを追加
$request->setHeader('HOST', 'foo.bar');

// POSTパラメータ設定
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->addPostParameter('hoge', 'fuga');

$response = $request->send();
$xml = simplexml_load_string($response->getBody());

あとは、$xmlを好きにすればよいだけ!
基本をしっかり押さえておけばらくちんぽんだね。