4.30.2014

How to Integrate Clipboard; Mac + tmux + Emacs in Terminal

Mac + tmux + ターミナル上のEmacs でクリップボードを連携する方法

 

tmux 上で Emacs を利用する場合、
OS のクリップボードとその内容をシームレスに連携するためには多少の手順が必要となる。

 

手順

 

1. Emacs の設定

Emacs 初期設定ファイル (~/.emacs/init.el など) に以下の内容を記述。

(defun copy-from-osx ()
  (shell-command-to-string "pbpaste"))

(defun paste-to-osx (text &optional push)
  (let ((process-connection-type nil))
    (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
      (process-send-string proc text)
      (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

 

2. reattach-to-user-namespace のインストール

tmux 内部での Mac OS X クリップボードのやりとり (pbcopy/pbpaste) を可能にするツール。

Homebrew でインストールするのが一番簡単だ。

$ brew install reattach-to-user-namespace

 

3. tmux の設定

tmux 初期設定ファイル (~/.tmux.conf) に以下の内容を記述し、tmux を再起動。

set-option -g default-command "reattach-to-user-namespace -l zsh"
  • 参考: tmux 再起動
    $ tmux kill-server

 

これで

  • Mac でクリップボードにコピー => tmux 上の emacs で貼付け (C-y)
  • tmux 上の emacs でコピー (M-w) => Mac で貼付け

が可能となった。

 

References

Ansible Playbook for MySQL Replication

Ansible: MySQL レプリケーションを実現するためのプレイブック 

 

目的

OSインストール済みの CentOS 6.5 サーバ 2台に対してそれぞれに MySQL をインストールし、
master - slave 構成のレプリケーション環境を構築したい。

普通にやっても面白くないので、Python製のオーケストレーションツール(構成管理ツール) Ansible を使って
インフラの状態をコードとして管理する。

とはいえ実際にやったことと言えば、こちらの素晴らしい playbook のミックスイン写経にすぎない。 

 

コード

説明するよりコードを見たほうが早いと思う。こちらにアップしている。

ファイル、ディレクトリ構成はこのような感じ。

.
├── README.md                    簡単な説明
├── Vagrantfile                  CentOS 6.5 x2台をVirtualBoxで
├── host_vars
│   ├── mysql-master             レプリケーションに関わるホスト単位の定義
│   └── mysql-slave
├── hosts                        インベントリ用
├── roles
│   └── mysql
│       ├── handlers
│       │   └── main.yml         conf書き換え時にサービス再起動
│       ├── tasks
│       │   └── main.yml         メインディッシュ
│       ├── templates
│       │   ├── .my.cnf.j2       rootユーザ用の認証情報を書いておく
│       │   └── my.cnf.j2        設定ファイルのテンプレート
│       └── vars
│           └── main.yml         バージョン設定やユーザのアカウントなど
└── site.yml

 

ポイント

 

Vagrantfile

opscode の CentOS 6.5 イメージをダウンロードして使用。
SELinux が有効だったので、libselinux-python を事前にインストールする必要があった。
IPアドレスは適当に振った。

 

site.yml

とりあえず vagrant ユーザで、sudo してタスクを実行する設定。

 

roles/mysql/tasks/main.yml

一連の処理を 5個のフェーズに分けている。

  • 1. Install packages
    • jaist.ac.jp から新しめのパッケージを一式ダウンロード
    • ローカルファイルを yum モジュールでインストールする際、
      /usr/local/src/{{ item }} のような指定ができなかったので、やむを得ずパスを echo するだけのタスクを一個作っている (need improvement)
    • MySQL関連の操作をするため、MySQL-python のインストールが必要
    • 今回、スローログを /var/log/mysql-slow.log として書くため、パーミッションの関係で事前にファイルを touch している
  • 2. Change credentials for root
    • /root/.mysql_secret ファイルが存在する場合にはパスワードが初期設定のままと判断し、roles/mysql/vars/main.yml の方で指定した root パスワードに設定し直す
    • 新しいパスワードは、/root/.my.cnf に記録しておく
  • 3. Setup users
    • ゲストアクセスを停止し、アプリユーザ、レプリケーション用ユーザを作成
  • 4. Create database
    • test データベースを削除し、vars で指定したDB (今回は awesome) を作成
  • 5. Replication settings
    • mysql_replication モジュールを活用
    • ハマったのが、changemaster する時に以下のようなエラーが出て、コマンドが success にならないこと。

      _mysql_exceptions.Warning: Sending passwords in plain text without SSL/TLS is extremely insecure. 

      MySQL 5.6 の仕様変更の影響で、start slave の時にパスワードを指定するのが新しいお作法のようだが、どうにもうまくいかず。
      結局、不本意ながら (ignore_errors: True) を設定した。(need improvement)

 

roles/mysql/templates/my.cnf.j2

jinja2 のテンプレートファイル。if や for を活用している。
slave 側には read_only の設定を入れた。

 

遊び方

Vagrantfile を作ったので手元でも試せる。README 参照。

4.07.2014

How to Send a Message to HipChat Room by Python Script

Python で HipChat に通知を投げる方法

 

API認証トークンの準備
  • ブラウザで Group admin -> API のページを開く
    https://YOUR_GROUP_NAME.hipchat.com/admin/api 
  • Create new token
    • Type: Notification <- 通知のみが目的なら、Admin にする必要はない
    • Label: トークンの名前を適当に
    • 生成され表示されたトークン文字列をコピー
  • Group admin -> Rooms から、メッセージを送りたい部屋を開いて API ID を確認

 

Python スクリプトの書き方
  • 使用するライブラリを選ぶ
  • 初期化
    >>> import hipchat
    >>> hipster = hipchat.HipChat(token=トークン文字列)
    
  • メッセージ送信
    >>> hipster.message_room(送信先の部屋のAPI_ID, '送信者名', 'メッセージ')
  • 送信者名やメッセージが UTF-8 だった場合は、エンコードしてから渡す
    >>> hipster.message_room(送信先の部屋のAPI_ID, '送信者名', u'UTF-8メッセージ'.encode('utf-8'))

 

とてもヒップ。

Docker: b2d-pipework - Installation Helper Script

b2d-pipework - 固定IPアドレス持ちDockerコンテナ環境構築のためのヘルパースクリプト

 

Mac + boot2docker + pipework を導入するための一連の作業をシェルスクリプトにした。

たとえば、インストール処理は以下のような流れ。

  • Homebrew を利用して docker および boot2docker パッケージの最新版をインストール
  • あらかじめ作成した profile ファイルに従って boot2docker VM (VirtualBox) を作成
  • SSH鍵($HOME/.boot2docker/id_rsa)を新規作成し、boot2docker VM にパスワードなしでログイン可能に
  • boot2docker VM 内に最新版の pipework をインストール
  • 192.168.99.0/24 のアドレスで、VirtualBox ホストオンリーネットワークを構築

ドキュメントは今のところ日本語のみ。 

 

 

Related Posts