19 Oct 2013, 03:56

gcc 4.8.1を利用するためにCygwin64に移行したメモ + Eclipse CDTの設定について

Cygwin 64bit版が 2013年の7月にリリースされたようです。Cygwin64bit版のgccは、c++0xに準拠したgcc 4.8.1をサポートしているようです。

コレを試してみたかったので、64bit版に移行してみました。ついでにEclipse CDTでCygwinを利用したC++開発環境をセットアップするまでの作業メモです。

64bit版のインストール

Cygwin公式サイトにいくと、以下の2つのインストーラがあります。

  • Cygwin
    • setup-x86.exe (32-bit installation)
    • setup-x86_64.exe(64-bit installation)

以前は、setup.exeの一つでした。ここでは、64bit版のsetup-x86_64.exeをダウンロードします。

インストーラを起動して、次へ次へと選択。ここでインストール先のフォルダパスが、defaultではcygwin64となっていることに気づきます。

いままで利用していたディレクトリ名がC:\cygwinだったので、ここは旧フォルダとの互換性を保つために、インストール先をC:\cygwinに変更します。合わせて、もともとのC:\cygwinは C:\cygwin86と名前変更しました。

リポジトリは、.jpが付いているところを選択。

  • ftp.yz.yamagata-u.ac.jp
  • ftp.jaist.ac.jp

あとは必要なパッケージを見繕ってインストール。ここでは、C++開発に必要な最低限をまずはインストールする。

  • Devel/gcc-core
  • Devel/gcc-g++
  • Devel/make

gccのバージョンは、gcc 4.8.1です。バッチリ v(-∀-)v

$ g++ --version
g++ (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.

/home/配下のファイルを旧環境から新環境に移行。これで、.sshやら.emacs.dやらが一切合切移動できる。

その他、Cygwinを導入したらこのまとめ記事が参考になりすぎる。

Eclipse CDT の設定

Eclipse CDTの導入は省略。Pleiadesから落とせばよい。

プロジェクト・エクスプローラから 新規C++プロジェクトを作成。ここで、ツールチェーンには、Cygwin GCCを選択。

Eclipse を -cleanオプションを再起動すると、4.8.1のパスをインクルードしてくれる。(cleanしないと、古い設定が残ったままになる)

apt-cygの対応

おまけで、Cygwin入れたら欠かせないツール、’apt-cyg’も導入する。

14 Jul 2013, 23:06

vagrantがスゲエ!コマンドラインからVirtualBoxを自由自在に操る方法

前回、VirtualBoxの導入をしました。

今回は、VirtualBoxをコマンドラインから操作することができるVagrantを使ってみようと思います。

[toc]

環境

  • VirtualBox 4.2
  • Vagrant 1.2.3
  • Windows 7 x64

Vagrantとは

Vargrantとは、仮想環境をコマンドラインから操作することができる、オープンソースRubyスクリプトです。

VirtualBoxやVMware Fusion/VMware WorkBench、EC2をコマンドラインから操作できます。VMware Fusionは有料(4000円くらい?)なので、無料のVirtualBoxで試してみます。

Vagrantのインストール

最新版をサイトからとってきてインストールします。

Windows番だとMINGWやRubyがまとめて梱包されていました(重い)。

Cygwinで Vagrantを利用するための設定

Cygwinから利用するためには、以下のおまじないが必要みたいです。

dos2unix /cygdrive/c/HashiCorp/Vagrant/bin/vagrant

詳しくはココ。

ちなみに,このページだと、.VirtualBoxフォルダがCygwinで実行した場合には、Cygwinホーム配下に作成されて、Windowsホーム配下のものと二重管理になるので、リンクを作成するといいよとかいてある。

自分の場合、特に不都合がでることはなかったが、念のため、以下も実施しておく。

コマンドプロンプトから管理者権限で、

cd C:\Windows\system32
mklink C:\cygwin\home\TSUNEMICHI\.VirtualBox C:\home\TSUNEMICHI\.VirtualBox
mklink "C:\cygwin\home\TSUNEMICHI\VirtualBox VMs" "C:\home\TSUNEMICHI\VirtualBox VMs"

TSUNEMICHIの部分はユーザ名なので、適当に読み替えてください。

Vagrantの使い方

ドキュメントはコチラ。

環境構築には、3コマンドで行けます。

$ vagrant box add base http://files.vagrantup.com/lucid32.box
$ vagrant init
$ vagrant up

以下、詳細です。

boxファイルの作成

Vagrantを利用するためには、まずboxファイルというものを用意する必要がある。boxファイルの作成方法は、以下の2つがあるようだ。

  • テンプレートをネットから落としてくる方法
  • boxファイルを自作する方法

自作する方法はまた別の機会に調べることにして、まずはテンプレートからサクッとvagrantを試してみます。

以下のサイトで、様々なOSのISOにvagrant利用環境を整えたboxが配布されている。例えば、CentOS 6.4 minimal(VartualBox)は以下。

インストールは、以下のコマンドを実行。

vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box

IOSイメージをダウンロードしてくるので、メチャクチャ時間がかかります。気長に待つこと。

Vagrantの初期化

boxファイルが作成できたら、VMを管理するためのディレクトリをつくって、ディレクトリでvagrantが動作するように初期化します。

% mkdir centos
% cd centos
% vagrant init base
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Vagrantfileが作成されます。

Vagrantの実行

いよいよ、vagrant実行です。コマンド数は少ないですが、ダウンロード時間でけっこうここに来るまで時間がかかった。。orz

いざ、実行!!( ´・∀・`)ノ

% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'base'...
 [0K[default] Matching MAC address for NAT networking...
[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...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.

ここで起動が止まってしまった。。。いろいろと苦労してBIOSのvt-d設定を有効化したら、起動できた!

VirtualBoxを見ると、起動中となっていることがわかります。ホントにコマンドラインから起動できた!!


vagrantの基本コマンド

コマンドの使い方はヘルプから確認できます。

$ vagrant -h

Usage: vagrant [-v] [-h] command []

    -v, --version                    Print the version and exit.
    -h, --help                       Print this help.

Available subcommands:
     box
     destroy
     halt
     init
     package
     plugin
     provision
     reload
     resume
     ssh
     ssh-config
     status
     suspend
     up

基本コマンドは以下。

  • vagrant init vagrant 初期化(Vagrantfile作成)
  • vagrant up vagrant 起動
  • vagrant ssh vagrant ログイン
  • vagrant halt vagrant 終了

ログイン

$ vagrant ssh
Last login: Sun Jul 14 21:24:25 2013
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

vagrant 終了(一時停止)

$ vagrant halt
[default] Attempting graceful shutdown of VM...

コマンド数も少ないので、簡単に覚えられますね。動画も載せておきます。

[//www.youtube.com/embed/Pj8aEvXfaW8?rel=0]

容量は・・・

ちなにみ、気になる体重・・・じゃなかった、容量ですが、CentOS minimal構成でどのくらいになるのか、調べました。

vagrant initを実行したフォルダの容量を調べたら、4.51 KB・・・あれ?(´・д・`)

Boxファイルは、以下にありました。

$HOME/.vagrant.d/boxes/(ボックス名)/virtualbox/box-disk1.vmdk

容量は、524MB。軽い軽い。

そして、VMイメージですが、以下にありました。

C:\home\TSUNEMICHI\VirtualBox VMs

容量は、1.5GB。ふふふ、重い重い。

ちなみに、Boxファイルからではなく、普通にCentOS6.4 minimal構成のISOをインストールした場合の容量は、157MBだ。桁が1つ違う。。。

08 Jun 2013, 11:16

Cygwin(Windows)をCentOSからmountする方法

はじめに

Cygwinを今までつかっていたけれども、VMware上のCentOSにtelnetしたほうがよいのではと最近考え始めた。

その理由は、Cygwinをつかっていると、

  • カスタマイズしすぎたzshやemacsの起動が遅い
  • screenのデタッチ後に作業を保存されない

vmware playerならば、作業をそのまま保存してサスペンドするのでこの課題を解決できる。

さて、CygwinからVM上のCentOSにお引越ししようとおもったけれども、またCygwinに戻ってくるかもしれないと思った。なので、CentOSからCygwinのフォルダをマウントしてしまえば良いのだということに気づいた。

というわけで、CentOSからmountコマンドでCygwinをマウントする。

CentOSでmountを使うための設定

Windowsの共有フォルダはSMBプロトコルによって除くことができる。CentOSからSambaを利用するためには、mount.cifsというコマンドを利用するらしい。というわけで、インストールする。

yum -y install samba-client

Windowsでmountされる設定(フォルダの共有設定)

次に、Windows側でCygwinの自分のフォルダを共有ファイルに設定する。

C:\cygwin\home(ユーザ)

のフォルダを右クリックして、

  • プロパティ -> 共有 -> 共有 -> 共有

を選択。これで共有が開始される。次に、

  • 詳細な共有 -> アクセス許可

を選択して、共有を許すユーザを追加する。ログインしているユーザを追加すればよい。

次に追加したユーザにフルコントロール権限を与える。これで読み書きできる。

skitch

CentOSからmountコマンドを実行する

マウントするためには、rootユーザである必要がある。

# mount するディレクトリ作成
mkdir -p /mnt/cygwin

# mount する。
mount -t cifs -o user=TSUNEMICHI,password=********* //192.168.1.101/TSUNEMICHI /mnt/cygwin

mount -t cifsで、内部的に mount.cifsコマンドに置き換えられる。

-oがオプション

  • usr ・・・Windowsのユーザ名
  • password Windowsのパスワード
  • //(WindowsのサーバIP(ipconfigで調べる)/共有フォルダ名
  • /mnt/cygwin ・・・ CentOS側のマウントディレクトリ

アンマウントするには、umount /mnt/cygwinでよい。

終わりに

本当は、別の目的で調べていた。

Jenkinsからビルドサーバにビルドを依頼しようとおもった時に、sshを利用するのではなくて、ビルドサーバのディレクトリをCIサーバにマウントしてしまえばいいんじゃねと思った。

しかし、この方法は一人で使うにはいいけれども、ユーザ管理や運用を考えた時にはJenkinsユーザにCIサーバのディレクトリ構造まで意識させる必要がある気がしたので、やめた。

参考

02 Jun 2013, 23:35

Cygwin上のRuby1.9をrbenvで最新版Ruby2.0にバージョンアップしたの巻

はじめに

タイトル通りです。Rubyをrbenvで最新版にバージョンアップする方法を調べたのでまとめます。

Ruby2.0は、1.9系に比べてrequireする速度が2.5倍!ときいたので、是非移行したくなりました!(・∀・)

[toc]

rbenvのインストール

rbenvとは

rbenvとは、Rubyの版数を管理するためのツール。これを使ってRubyのバージョンアップをします。Rubyの版数管理だと、rvmもあるけれども、rbenvは後発のツールで、Rubyのみに特化した、シンプルなツールらしい。

sstephenson/rbenv ・ GitHub

rbenvのインストール

rbenvはgithubで公開されているツールなので、gitを使って取得します。

# ホームディレクトリに移動
cd 
# githubから rbenv取得。~/.rvenvに置きます。
git clone git://github.com/sstephenson/rbenv.git .rbenv

rbenvの設定

rbenvにパスを通すために、ログインシェルにパスを追記します。自分の場合は、.zshrcに以下を追記した。

# .rvenvディレクトリがあるときだけ設定を追加
if [ -d ${HOME}/.rbenv  ] ; then
    PATH=${HOME}/.rbenv/bin:${PATH}
    export PATH
    eval "$(rbenv init -)"
fi

source .zshrcで読み込み。

ちなみに、この設定をいれたら、.zshrcの読み込みが遅くなった気がするので、普段はこの記述はコメントアウトしておくことにしました。

rbenv-buildとrvenv-gemsetのインストール

rbenvだけだと、Rubyをビルドすることができないため、rbenv-buildもインストールします。

mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
# rbenv-build
git clone git://github.com/sstephenson/ruby-build.git

rbenvで最新版Ruby2.0をインストールしてみる

まずは、利用できるバージョンを確認する。

% ~/.rbenv/plugins/ruby-build/bin/ruby-build --definitions
2.0.0-dev
2.0.0-p0
2.0.0-p195

最新安定版である Ruby 2.0.0-p195を入れます。Cygwinでコンパイルをすると、想像を絶するほどの時間がかかった。-vをつけると、コンパイルの様子が出力される。

% rbenv install 2.0.0-p195 -v

と、ここでエラーした。。。。(´・ω・`)

compiling process.c
In file included from ./include/ruby/ruby.h:1567:0,
                 from process.c:14:
./include/ruby/intern.h:293:72: warning: 'struct timeval' declared inside parameter list
./include/ruby/intern.h:293:72: warning: its scope is only this definition or declaration, which is probably not what you want
In file included from ./include/ruby/ruby.h:1567:0,
                 from process.c:14:
./include/ruby/intern.h:412:1: warning: 'struct timeval' declared inside parameter list
./include/ruby/intern.h:413:79: warning: 'struct timeval' declared inside parameter list
./include/ruby/intern.h:414:32: warning: 'struct timeval' declared inside parameter list
process.c: In function 'rb_f_sleep':
process.c:4105:2: error: type of formal parameter 1 is incomplete
Makefile:325: recipe for target `process.o' failed
make: *** [process.o] Error 1

回避方法を参考して、ソースをダウンロードしたところで一旦 Ctrl+Zで止めて、/tmp配下にあるrubyソースの中の、include/ruby/intern.hに,「#include 」を追記する。Windows 7,8での不具合っぽい。

Rubyのスナップショットをビルド―2.1.0dev & 2.0.0対応― – わさっき

気を取り直して、再度コンパイルをかけると、opensslのなにかでハング!

止まった。。。(´・ω・`)。。。困った。。。(´・ω・`)

make[1]: ディレクトリ `/tmp/ruby-build.20130602153618.8580/ruby-2.0.0-p195' から出ます
configuring io/nonblock
configuring io/wait
configuring json
configuring json/generator
configuring json/parser
configuring mathn/complex
configuring mathn/rational
configuring nkf
configuring objspace
configuring openssl

これも、ググったら回避方法が載っていた。./cofigureにオプションを設定すればよいようだ。

CONFIGURE_OPTS=-"-with-opt-dir=/usr/local" rbenv install 2.0.0-p195 -v

これでOK.こんなに苦戦するとは。。。最後に、おまじないを叩いて終了。

% rbenv rehash

2.0.0に切り替える。

# インストールされているRubyのバージョンを確認
% rbenv versions
* system
  2.0.0-p195 (set by /home/TSUNEMICHI/.rbenv/version)
# 2.0をいつものバージョンにする
% rbenv global 2.0.0-p195

 

おわりに

rbenvは、いろんなRuby版数を簡単に切り替える機能もあります。なので、試しにRubyを最新版にあげてみて、動かなかったら古い版数に戻したり、特定のディレクトリ配下だけを古い版数で動かしたり、なんていう設定も可能です。

体感的には、2.0にしても速度が向上したようには感じされなかった。(むしろ・・・おそorz)CygwinでRubyが異常に遅いことは有名らしい。Linuxではそんなことはないらしい。(3倍速?)Cygwin上にRubyを動作させることがはかないあやまちのような気がした。

環境

  • Cygwin 1.7
  • Ruby 1.9.3 -> 2.01

参考記事

26 May 2013, 06:38

Cygwinにtreeコマンドをいれるためのメモ

Cygwinにはtreeコマンドがないようです。

いつものことながら手のかかる子( 一一)

ということで、ソースコードからインストールします。

treeソースコードの入手

curl -LO http://mama.indstate.edu/users/ice/tree/src/tree-1.6.0.tgz
tar xzfv tree-1.6.0.tgz
cd tree-1.6.0.tgz

 

treeコンパイル

続いてコンパイルですが、Cygwinの場合、makefileの修正が必要。Cygwinはコメントを外してくださいという箇所がMakefileのなかにあるので、コメントアウトを消します。

# Uncomment for Cygwin:
CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
LDFLAGS=-s
TREE_DEST=tree.exe
OBJS+=strverscmp.o

 

あとは、コンパイルしてインストールするだけ。デフォルトでは、/usr/bin配下にインストールされます。

% make && make install
% tree
.
├── CHANGES
├── color.c
├── color.o
├── doc
│ツꀀツꀀ ├── tree.1
│ツꀀツꀀ ├── tree.1.fr
│ツꀀツꀀ └── xml.dtd
├── hash.c
├── hash.o
├── html.c
├── html.o
├── INSTALL
├── LICENSE
├── Makefile
├── Makefile~
├── README
├── strverscmp.c
├── strverscmp.o
├── TODO
├── tree.c
├── tree.exe
├── tree.h
├── tree.o
├── unix.c
├── unix.o
├── xml.c
└── xml.o

1 directory, 26 files

25 May 2013, 13:39

Cygwin使いならば絶対に身につけておきたいコマンド5選+apt-cyg

Windows上で開発をするならばCygiwinは必須ツールですが、今日はそんなCygwin独自コマンドを紹介します。

この本を読みました。Cygwin本はいろいろ出ているけれども、今までで一番詳しい解説書だった。オススメ。

 

cygstart

cygstartは、Windowsでのデフォルト起動プログラムで、指定されたファイルを実行できる。たとえば、テキストファイルがサクラエディタで開くのがデフォルトならば、

cygstart hogehoge.txt

と入力すると、サクラエディタで開かれる。

自分の場合は、aliasを切って、さらに便利にしている。

alias c='cygstart'

さらに便利なのが、ディレクトリを指定すると、そのフォルダがエクスプローラで起動される。たとえば、

cygstart .

と入力することで、カレントディレクトリをエクスプローラで表示することができる。

cygcheck

cygcheckはCygwin プログラムの診断を行うユーティリティ。

  PROGRAM              list library (DLL) dependencies of PROGRAM

  -c, –check-setup    show installed version of PACKAGE and verify integrity

                       (or for all installed packages if none specified)

  -d, –dump-only      just list packages, do not verify (with -c)

  -s, –sysinfo        produce diagnostic system information (implies -c)

  -r, –registry       also scan registry for Cygwin settings (with -s)

  -k, –keycheck       perform a keyboard check session (must be run from a

                       plain console only, not from a pty/rxvt/xterm)

  -f, –find-package   find the package to which FILE belongs

  -l, –list-package   list contents of PACKAGE (or all packages if none given)

  -p, –package-query  search for REGEXP in the entire cygwin.com package

                       repository (requires internet connectivity)

  –delete-orphaned-installation-keys

                       Delete installation keys of old, now unused

                       installations from the registry.  Requires the right

                       to change the registry.

  –enable-unique-object-names Cygwin-DLL

  –disable-unique-object-names Cygwin-DLL

  –show-unique-object-names Cygwin-DLL

                       Enable, disable, or show the setting of the

                       “unique object names” setting in the Cygwin DLL

                       given as argument to this option.  The DLL path must

                       be given as valid Windows(!) path.

                       See the users guide for more information.

                       If you don’t know what this means, don’t change it.

  -v, –verbose        produce more verbose output

  -h, –help           annotate output with explanatory comments when given

                       with another command, otherwise print this help

  -V, –version        print the version of cygcheck and exit

多機能だ。自分が使うのは、もっぱらパージョンコマンド(-c)だ。

[tsu-nera]% cygcheck -c cygwin gcc ruby screen zsh
Cygwin Package Information
Package              Version          Status
cygwin               1.7.18-1         OK
gcc                  3.4.4-999        OK
ruby                 1.9.3-p385-2     OK
zsh                  5.0.2-1          OK

こんな感じで、コマンドのバージョンが一気に調べられる。

cygpath

これはあまり使わないけど、今回の記事のために調べてみた。

WindowsとCygwinでは、ファイルパスの記述方法がことなる。

  • Windows形式のファイルパスは “C:\Users\hogehoge”
  • Cygwin形式のファイルパスは”/cygdrive/c/Users/hogehoge”

ファイルパスをWindows形式からCygwin形式に、Cygwin形式からWindows形式に、簡単に変換できるコマンドがcygpathだ。

# Cygwin形式からWindows形式に
[tsu-nera]% cygpath -w /home/TSUNEMICHI/dotfiles
C:\cygwin\home\TSUNEMICHI\dotfiles

# Windoows形式からCygwin形式に
[tsu-nera]% cygpath -u "C:\cygwin\home\TSUNEMICHI\dotfiles"
/home/TSUNEMICHI/dotfiles

getclip

getclipは、Windows上のクリップボードにあるものを標準入力に出すことができるもの。

getclip > hogehoge.txt

などと、リダイレクトすると、ファイルに出力できる。

putclip

putclipはgetclipの逆で、Windows上のクリップボードに、出力をコピーすることができる。通常は、echoまたはcatと、パイプと組み合わせて使う。

echo 'hogehoge' | putclip
cat hogehoge.txt | pugclip

getclip/putclipの文字化け対策

CygwinはUTF-8だが、WindowsはShift-jis。なので、そのまま使うとすると、文字化けしてしまう。

そんなときは、nkfコマンドをうまくつかう。

# utf-8に変換してファイルへ
 getclip | nkf -w > hogehoge.txt

# Shift-jisに変換してクリップボードへ
nkf -s < hogehoge.txt | putclip

nkfはCygwinのデフォルトコマンドではないので、以下の記事を参照してください。

Cygwinにnkfをインストールして文字化け攻略する! | Futurismo

apt-cyg

デフォルト内部コマンドではないけれども、Cygwinを使うにおいては必須コマンドがこれ。Linuxのapt-get や yumのように、簡単にツールを導入することが可能となる。通常ならば、setup.exeを利用してツールをいれるのだが、コレさえあれば、setup.exeは不要となる。

これについては、過去記事をごらんください。

setup.exeはもういらん!Cygwinでコマンドラインからインストール/アップデートする[apt-cyg]を試す | Futurismo

25 May 2013, 12:56

zshは至高の利便性?!Cygwinにzshをインストール&設定した導入方法まとめ

シェルのなかで、至高の利便性を誇ると言われているzshを試してみました。きっかけは、この本を読んだので。作業メモを兼ねて、簡単に使い方を書きます。

 

zshとは

zshとは、シェルの種類のひとつ。Bashやtcshなどの、全てのシェルのいいとこどりをして開発された至高のシェル。”z”というのは、これで” これでシェルは完成で終わりだよ” という意味。

Z Shell – Wikipedia

zsh導入まで

zshインストール方法

Cygwinパッケージに含まれているので、setup.exeかapt-cygで取得します。

$ apt-cyg install zsh
$ zsh --version
zsh 5.0.2 (i686-pc-cygwin)

zshと打ち込むとzshになります。入力のためのコンソールが%になりました。

# zshに切り替える
zsh

zshをログインシェルにする

ログインしたときに、zshが起動するように設定します。

# ログインシェルの確認
% echo $SHELL
/bin/bash

普通はchshを利用するけれども、Cygwinではそれがない!なので、/etc/passwdを直接書き換えます。

% emacs /etc/passwd

# 変更前
tsu-nera:unused:1000:513:U-TSUNEMICHI-VAIO\TSUNEMICHI,S-1-5-21-2209003112-325970183-628590984-1000:/home/TSUNEMICHI:/bin/bash

# 変更後
tsu-nera:unused:1000:513:U-TSUNEMICHI-VAIO\TSUNEMICHI,S-1-5-21-2209003112-325970183-628590984-1000:/home/TSUNEMICHI:/usr/bin/zsh

すると、CygwinやCygtermはみごとzshで起動。しかし、母艦terminalのminttyだけがbashのまま・・・・(´・ω・`)。

いろいろと頑張ること1時間・・・ついにわかった!(・∀・)

ユーザ環境変数で、$SHELLがbashだった。

コントロールパネル – > システム -> システムの詳細設定 -> 環境変数からユーザ環境変数の設定画面へ。/bin/bashをを/usr/bin/zshに変更することで、minttyもzshで起動するようになった(^O^)

.zshrcの作成

.zshrcを作成すると、ログイン時に読み込まれる。$HOMEディレクトリにまずは作成。

touch .zshrc

.zshrcに書く内容は、いろんなサイトを参考に作ってみた。

自分の.zshrcファイルを公開 – 世界中の羊をかき集めて

あと、zsh最強シェル入門の本も参考にした。以下、便利そうなのをつまんで紹介。

screenで端末間のヒストリ機能の共有

zshは強力なヒストリ機能が魅力。特に、screenコマンドを使っていると、端末で実行したコマンドを全て共有したい場合がある。zshならば、端末ごとの共有だってできてしまう。以下2つの設定で有効になる。

## Screenでのコマンド共有用
## シェルを横断して.zshhistoryに記録
setopt inc_append_history
## ヒストリを共有
setopt share_history

他にも、重複排除などの機能もたくさん。

カレントディレクトリの表示

zshを利用すると、コンソール上にカレントディレクトリも表示することができる。もうpwdなんていらないのである。設定は以下。

SnapCrab_NoName_2013-5-24_17-47-24_No-00

# 色有効
autoload -U colors
colors

# 色を定義
local GREEN=$'%{\e[1;32m%}'
local BLUE=$'%{\e[1;34m%}'
local DEFAULT=$'%{\e[1;m%}'

# 通常のプロンプト
PROMPT=$BLUE'[%n]%# '$WHITE
# 右側のプロンプト。ここでカレントディレクトリを出す。
RPROMPT=$GREEN'[%~]'$WHITE
setopt transient_rprompt

グローバルエイリアスの設定

グローバルエイリアスを設定することで、コマンドの任意の場所で展開できるようになる。zshだけの機能。

例えば、ls -l L と入力すると、ls -l | less というように変換される。

alias -g L='| less'
alias -g H='| head'
alias -g T='| tail'
alias -g G='| grep'
alias -g GI='| grep -i'

Cygwinでwindowsパス形式のWaringを抑止する

zshでの操作の途中でこんなエラーが出る。

  MS-DOS style path detected: ./.zshrc\~
  Preferred POSIX equivalent is: ./.zshrc/~
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

これは、CygwinがWindowsパス形式をWaringとするため。コントロールパネル – > システム -> システムの詳細設定 -> 環境変数からシステム環境変数の設定画面へ。

CYGWIN=nodosfilewarningというように、環境変数追加するとよい。

SnapCrab_環境変数_2013-5-22_8-21-18_No-00

gnupack Users Guide – 技術情報

 

他にも便利そうな機能はたくさんあるけれども、とりあえずはこのへんでやめておく。

25 May 2013, 12:45

Cygwinでgit push時にパスワード入力を省略する方法

Cygwinでgit pushするとき、いちいちパスワードをうつのが面倒だ。なにか回避方法がないものか?

普通の(Linux)の場合、$HOME/.netrcに以下を追加すればよいらしい。

machine github.com
login tsu-nera
password ****************

 

ただし、Cygwinではうまくいかず、_netrcという名前にしろとあったり。

これでもうまくイカなかった。しかたがないので、expectコマンドを使って、パスワード入力を自動化した。

追記

名前は.netrcにして、アクセス権限を変更したらうまくいくようになった!!

chmod 600 ~/.netrc

git clone https://ID@HOST/… できない場合の暫定対策 – iWA’s 雑記@はてな出張所

19 May 2013, 11:56

縦分割ができる開発版screen(version 4.1.0)をCygwinに入れるメモ

SnapCrab_~_2013-5-19_20-46-31_No-00

最近イタク感動を覚えた記事が以下です。

卜部昌平のあまりreblogしないtumblr – 俺の .screenrc が火を吹くぜ

 

スッゲー!Σ(゚Д゚ノ)ノ

いつかはこんな画面を目指して自分も精進しようと決意しました。screenはデフォルトでは横分割しかできないけれども、開発版のscreenはなんと縦分割が可能!ということで、開発版のscreen(version 4.1.0)をソースからコンパイルしてみました。

縦分割はtmuxも実現可能。最近はtmuxが熱いらしい。screenは終わったとかうわさをきいたが、Google検索調査ではこんなかんじだった。

 

screenとは

screenとは、GNU プロジェクトのひとつ。今は、

GNU Screen – GNU Project – Free Software Foundation

仮想端末作り出し、端末を切り替えながら作業することを助けるツール。一つのコンソール上で、バーチャルなコンソールをいくつも作成して、それらをコマンドラインから切り替えられる。Emacsでも画面分割ができるが、あれをコンソールで実現する感じ。

コンソール画面を10個くらい開いている自分にとっては神ツールだ。

最新版 GNU screeenをインストールする

最新版は、ソースからコンパイルして、インストールする。

事前準備

以下のツールがコンパイルに必要なので、まだCygwinに入っていない場合はインストールすること。

  • gcc4
  • autoconf
  • automake
  • libncurses-devel
  • git
  • libcrypt-devel
  • ncurses(make installするとき、tieというコマンド実行で必要っぽい。これでえらーした)
$ apt-cyg install gcc4 autoconf automake libncurses-devel

gccのバージョンは4である必要があるので、一応確認。

$ gcc --version
gcc (GCC) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.

ソースの取得

githubより取得して、github用のスクリプトを実行します。

$ git clone git://git.sv.gnu.org/screen.git
$ cd screen/src
$ ./autogen.sh

./configureを実行。デフォルトでは/usr/bin配下にインストールされるので、自分でインストール場所を変えたい場合は、./configure –prefix=“hogehoge/hogehoge”で指定する。また、–enable-colors256を指定すると、256色が利用できる。

これでMakefileが生成されたらmakeする。

$ ./configure
$ make
$ make install

インストール完了!ミッションコンプリート!!━━v(o´∀`o)v━━

$ screen -v
Screen version 4.01.00devel (GNUc2cd059) 2-May-06

GNU screen最新の縦分割を試す

縦分割について

縦分割を実行するには、(デフォルトでは) Ctrl + a, |でいけます。

横分割は Ctrl + a, Sです。

グレイトな結果ですね。

[http://www.youtube.com/embed/p18lXnKlg9E?rel=0]

256色の設定について

minttyで256色を有効にするには、.screenrcに以下を追記するとよい。

 TERM=xterm-256color screen

Cygtermだとこのリンクが参考になる。

.screenrcの設定や開発版の新機能の探検はまた今度で。

オススメ書籍

余談だけれども、screenについては以下の本で解説されている。zshの本なのに。。。

参考

SnapCrab_~_2013-5-19_20-46-31_No-00

最近イタク感動を覚えた記事が以下です。

卜部昌平のあまりreblogしないtumblr – 俺の .screenrc が火を吹くぜ

 

スッゲー!Σ(゚Д゚ノ)ノ

いつかはこんな画面を目指して自分も精進しようと決意しました。screenはデフォルトでは横分割しかできないけれども、開発版のscreenはなんと縦分割が可能!ということで、開発版のscreen(version 4.1.0)をソースからコンパイルしてみました。

縦分割はtmuxも実現可能。最近はtmuxが熱いらしい。screenは終わったとかうわさをきいたが、Google検索調査ではこんなかんじだった。

 

screenとは

screenとは、GNU プロジェクトのひとつ。今は、

GNU Screen – GNU Project – Free Software Foundation

仮想端末作り出し、端末を切り替えながら作業することを助けるツール。一つのコンソール上で、バーチャルなコンソールをいくつも作成して、それらをコマンドラインから切り替えられる。Emacsでも画面分割ができるが、あれをコンソールで実現する感じ。

コンソール画面を10個くらい開いている自分にとっては神ツールだ。

最新版 GNU screeenをインストールする

最新版は、ソースからコンパイルして、インストールする。

事前準備

以下のツールがコンパイルに必要なので、まだCygwinに入っていない場合はインストールすること。

  • gcc4
  • autoconf
  • automake
  • libncurses-devel
  • git
  • ncurses(make installするとき、tieというコマンド実行で必要っぽい。これでえらーした)
$ apt-cyg install gcc4 autoconf automake libncurses-devel

gccのバージョンは4である必要があるので、一応確認。

$ gcc --version
gcc (GCC) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.

ソースの取得

githubより取得して、github用のスクリプトを実行します。

$ git clone git://git.sv.gnu.org/screen.git
$ cd screen/src
$ ./autogen.sh

./configureを実行。デフォルトでは/usr/bin配下にインストールされるので、自分でインストール場所を変えたい場合は、./configure –prefix=“hogehoge/hogehoge”で指定する。また、–enable-colors256を指定すると、256色が利用できる。

これでMakefileが生成されたらmakeする。

$ ./configure
$ make
$ make install

インストール完了!ミッションコンプリート!!━━v(o´∀`o)v━━

$ screen -v
Screen version 4.01.00devel (GNUc2cd059) 2-May-06

GNU screen最新の縦分割を試す

縦分割について

縦分割を実行するには、(デフォルトでは) Ctrl + a, |でいけます。

横分割は Ctrl + a, Sです。

グレイトな結果ですね。

[http://www.youtube.com/embed/p18lXnKlg9E?rel=0]

256色の設定について

minttyで256色を有効にするには、.screenrcに以下を追記するとよい。

 TERM=xterm-256color screen

Cygtermだとこのリンクが参考になる。

.screenrcの設定や開発版の新機能の探検はまた今度で。

オススメ書籍

余談だけれども、screenについては以下の本で解説されている。zshの本なのに。。。

参考

19 May 2013, 00:06

Cygiwnでの操作ログをevernoteにライフログする方法

ライフログ大流行の昨今、やっぱりコンソールの履歴もライフログしたいです。

ブログを書くときとか、操作したことを自動的に記録出来ればいいとおもった。さらには、Evernoteに自動転送してログできればいいなと思ったので、方法を調べてみた。

Evernoteに自動転送する方法

Evernoteに自動転送するには、インポートフォルダの設定をすればよい。

  1. 任意の場所にログを保存するフォルダを作成。
  2. Evernoteにログを保存したフォルダを作成。
  3. Evernoteのツールバーから、ツール -> インポートフォルダを選択。
  4. 追加を選択して、作成したWindows上のフォルダを指定する。
  5. 「ノートブック」欄を選択して、Evernoteフォルダを選択する。

evernote_mintty

Cygwin上でログを記録をする

起動と終了をシェルでまとめました。

ログ開始

ログを取るには、scriptコマンドを利用します。script  -a で追記モードで起動。ついでに、起動したときの日付をファイル名にします。

#!/bin/bash

LOG_TEMP_DIR=$HOME/log/evernote/temp
DATE=`date +%y%m%d`

script -af $LOG_TEMP_DIR/$DATE.txt

ログ終了

Evernoteへはログ終了時に転送します。まずはコマンドラインからscriptを終了させることが前提。

制御文字をcolコマンドで削除します。Evernoteの文字コードがShift-Jisなため、Shift-JISでなければ、変換が必要。nkfコマンドで変換します。なお、拡張子はtxt形式にしないと、evernote上で開けない。

#!/bin/bash
LOG_DIR=$HOME/log/evernote
LOG_TEMP_DIR=$HOME/log/evernote/temp
DATE=`date +%y%m%d`

# 制御文字削除
col -bx < $LOG_TEMP_DIR/$DATE.txt > $LOG_TEMP_DIR/$DATE.col.txt

# 文字コード変換 Shift-JIS
nkf -s $LOG_TEMP_DIR/$DATE.col.txt > $LOG_TEMP_DIR/$DATE.sjis.txt

# Evernoteへ移動
mv $LOG_TEMP_DIR/$DATE.sjis.txt $LOG_DIR/$DATE.txt

# 一時ファイル削除
rm $LOG_TEMP_DIR/$DATE.col.txt

画面制御文字は妥協した

ちなみに、画面制御文字はどうしても取り除けなかかった。33m~や0;など。これは、minttyを色なしで表示すればいいが、それはやりたくないので妥協。

Cygtermを使う

シェルでガンパラなくても、Cygtermのログ機能を使えば、画面制御文字も取り除ける。

minttyでの出力結果をcygtermからtail -f で表示させるとか。まあ、いろいろと方法を探したけれども、Cygtermを利用するのが一番簡単そうだ。minttyを捨てて、Cygtermにするかどうか、悩むところだ。。。

ツールバーの設定 -> その他の設定 -> ログを選択。

標準ログファイル名で、strftimeフォーマットに従った名前を書く。ここでは、%y%m%d.txtとした。これで今日の日付が入る。

保存先ディレクトリでevernoteと連携しているフォルダを指定。

自動的にログ採取を開始するにチェックをいれると、Cygterm起動時にログが開始される。

SnapCrab_Tera Term その他の設定_2013-5-19_15-5-22_No-00

その他

これを、ログインシェルとログアウトシェルに書いて自動的にログするかは検討中。そんなにログは必要かな?