「Mac」カテゴリーアーカイブ

MovableType Perlのパスを一括変換

find -exec で sedで置き換えをすればいいのだが、sedの実装によって -i オプションの動作が異なるのでちょっとはまった。

Linux(GNU sed)の場合

バックアップを作成しない場合

$ find . -name "*.cgi" -exec sed -i 's/\/usr\/bin\/perl/\/usr\/local\/bin\/perl/' {} \;

バックアップを作成する場合は、-iに拡張子を指定。

$ find . -name "*.cgi" -exec sed -i.bak 's/\/usr\/bin\/perl/\/usr\/local\/bin\/perl/' {} \;

Mac OS X(BSD sed)の場合

Mac OS X のsedは、-i オプションに引数(バックアップファイルの拡張子)の指定が必須なので、-iに何も指定しないと、

sed: 1: "./mt-add-notify.cgi": invalid command code .
sed: 1: "./mt-atom.cgi": invalid command code .
sed: 1: "./mt-check.cgi": invalid command code .
...

というエラーになってしまう。
なので、バックアップを作成しない場合は、-i ''を指定する。

$ find . -name "*.cgi" -exec sed -i '' 's/\/usr\/bin\/perl/\/opt\/local\/bin\/perl/' {} \;

バックアップを作成する場合は、

$ find . -name "*.cgi" -exec sed -i '.bak' 's/\/usr\/bin\/perl/\/opt\/local\/bin\/perl/' {} \;

MovableType Perlのパスを一括変換:Jays Room.

Sed: ‘sed: 1: invalid command code R’ on Mac OS X at Mark Needham.

Mac OS X Lion RVMのRuby1.9.3でSegmentation fault

RVMでMac OS X LionにRuby1.9.3をインストール後、bundleしたらSegmentation faultが発生。

$ bundle
Fetching source index for https://rubygems.org/
/Users/pistolfly/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799: [BUG] Segmentation fault
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.3.0]
...

解決方法

$ rvm pkg install openssl
$ rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

Ruby 1.9.3 + Rails 3.2.1 で segmentation fault -> 解決 - さとうようぞうのblog
RVM: Ruby Version Manager - 'rvm pkg install openssl'

OS X Lion で postfixを設定する

ローカル開発環境用に Mac OS X Lion に postfix を設定する。
Mac OS X には最初からpostfixが入っているので、まず Lion でそのままの設定で postfix を起動してみる。

$ sudo postfix start

メール送信すると、以下のエラー。
/var/log/mail.log

postfix/smtpd[3475]: fatal: open /etc/postfix/submit.cred: No such file or directory
postfix/master[3282]: warning: process /usr/libexec/postfix/smtpd pid 3475 exit status 1
postfix/master[3282]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

ログを見ると、/etc/postfix/submit.cred が存在しないというエラー。
OS X Lion postfix smtpd problems: Apple Support Communities
/etc/postfix/submit.cred を作成し、パーミッションを設定。

$ sudo touch /etc/postfix/submit.cred
$ sudo chmod 600 submit.cred

/etc/postfix/submit.cred

submitcred version 1
hostname|user|password

※ hostname、user、passwordは、実際の送信したいユーザのものに置き換える。
※ submit.credは、空行が含まれていると、
warning: syntax error on line 2 of /etc/postfix/submit.cred
という警告が出るようなので、空行は入れない。

/etc/postfix/main.cf

$myhostname = macbook-pro.local
$mydomain = macbook-pro.local
myorigin = $mydomain
inet_interfaces = all
# 以下の行があったらコメントアウト
#inet_interfaces = loopback-only

自動起動の設定

/System/Library/LaunchDaemons/org.postfix.master.plist

  • -e オプション(プロセスが終了するまでの時間)をコメントアウト。
  • OnDemand を false に設定。
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>org.postfix.master</string>
        <key>Program</key>
        <string>/usr/libexec/postfix/master</string>
        <key>ProgramArguments</key>
        <array>
                <string>master</string>
<!--
                <string>-e</string>
                <string>60</string>
-->
        </array>
        <key>QueueDirectories</key>
        <array>
                <string>/Library/Server/Mail/Data/spool/maildrop</string>
        </array>
        <key>AbandonProcessGroup</key>
        <true/>
        <key>OnDemand</key>
        <false/>
</dict>
</plist>
$ sudo launchctl unload /System/Library/LaunchDaemons/org.postfix.master.plist 
$ sudo launchctl load /System/Library/LaunchDaemons/org.postfix.master.plist

MacのターミナルでのEmacsのメタキー

MacのターミナルでEmacsを使う場合に、デフォルトだとメタキーとしてエスケープキーしか使えないので不便だったが、ターミナルの環境設定→キーボードで、「メタキーとして option キーを使用」にチェックを入れると、optionキーをメタキーとして使用できた。
[mac][emacs] Terminal上でemacsのメタキーを使う方法 - goinger的日記

電子署名でダウンロードファイルを検証

gnupgがインストールされているか確認。

$ yum list installed gnupg
Loaded plugins: fastestmirror
Installed Packages
gnupg.x86_64                     1.4.5-14.el5_5.1                      installed

インストールされていなければインストール

$ sudo yum install gnupg

※Mac OS X の場合は、MacPortsでgnupgをインストールできる。
設定ファイルを初期化する。
--list-keysはgpgに登録されている公開鍵を表示するコマンド。
初回実行時に設定ファイルが自動的に作成される。

$ gpg --list-key
gpg: ディレクトリー「/home/pistolfly/.gnupg」ができました
gpg: 新しい構成ファイル「/home/pistolfly/.gnupg/gpg.conf」ができました
gpg: 警告: 「/home/pistolfly/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/home/pistolfly/.gnupg/pubring.gpg」ができました
gpg: /home/pistolfly/.gnupg/trustdb.gpg: 信用データベースができました

~/.gnupg/gpg.conf を編集。

$ vi ~/.gnupg/gpg.conf 

以下の部分のコメントを外して、公開鍵を鍵サーバから自動的に取得できるようにする。

#keyserver-options auto-key-retrieve

 ↓

keyserver-options auto-key-retrieve

ダウンロードファイルの真正性を確認する

gpg --verify <電子署名ファイル>

例:

$ ls emacs*
emacs-23.3a.tar.gz emacs-23.3a.tar.gz.sig
$ gpg --verify emacs-23.3a.tar.gz.sig 
gpg: 2011年08月03日 00時39分07秒 JSTにDSA鍵ID BC40251Cで施された署名
gpg: 鍵BC40251Cをhkpからサーバーsubkeys.pgp.netに要求
gpg: 鍵BC40251C: 公開鍵"Chong Yidong <cyd@stupidchicken.com>"を読み込みました
gpg: 絶対的に信用する鍵が見つかりません
gpg:     処理数の合計: 1
gpg:           読込み: 1
gpg: "Chong Yidong <cyd@stupidchicken.com>"からの正しい署名
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: AF1A 0574 841E 0F2D EDE2  829A 764D A716 BC40 251C

gpg: "Chong Yidong <cyd@stupidchicken.com>"からの正しい署名
とあるので、OK。
gpg: 警告: この鍵は信用できる署名で証明されていません!
は、公開鍵を信頼していない状態なので表示されている。

制御文字の入力方法

Emacs

C-q 制御文字

例: エスケープ文字を入力

C-q C-[

シェル、vim

Ctrl+V 制御文字

例: エスケープ文字を入力

Ctrl+V Ctrl+[

コントロールキーと同時に押す文字は?

上記で「制御文字」と記載しているところは、Ctrl+(コントロールキーと同時に押す)で送出するが、この時のコントロールキーと同時に押す文字は、入力したい制御文字の7ビット目に1をセット、つまり0x40(64)を足した文字である。
man ascii 等でASCII文字の一覧を表示して探す。

例:
エスケープ文字は0x1B(27)
7ビット目に1をセットする=0x40(64)を足すと0x5B(91)
0x5B(91)は[
よってエスケープ文字を送出するにはCtrl+[

改行は0x0A(10)
7ビット目に1をセットする=0x40(64)を足すと0x4A(74)
0x4A(74)はJ
よって改行を送出するにはCtrl+J

https://ja.wikipedia.org/wiki/ASCII#ASCII.E5.8D.B0.E5.AD.97.E5.8F.AF.E8.83.BD.E6.96.87.E5.AD.97

なお、印字可能文字のうち「@」から始まる32文字については、ASCII値を64減じて対応する制御文字を求め、この制御文字を「コントロール+」(英: control+)という前置表現を付けた印字可能文字で表記する慣習がある。

例:BELコード(07) →「コントロール+G」(受信した側の機器で注意喚起音が鳴る)

この制御文字の表記方法は、キーボード上の印字可能文字キーを制御文字の送出に用いていた機器の名残りであると考えられる(7ビット目を0にセットする専用キー(Ctrlキー)を、印字可能文字キーと同時に押して制御文字を送出)。

エスケープ文字の入力方法 - nelnalog.note

MacPorts で特定のパッケージのみ除外する

$ sudo port upgrade outdated

とやると、アップデートのあるportsをすべてまとめてアップグレードできるが、特定のportsはアップグレードしたくない場合は、以下のように演算子を使って指定できる。
例: PHP関連はアップグレードしたくない場合

$ sudo port upgrade outdated and not php*

Excluding packages from MacPorts operations | The Gippy Pages

Mac OS Xでobjdump、ldd

objdumpは、MacPortsでbinutilsをインストールすると、gobjdumpという名前で同等のものが使用できる。(頭にgが付く。)

$ sudo port install binutils

インストールされたコマンドを確認。

$ port contents binutils
Port binutils contains:
  /opt/local/bin/gaddr2line
  /opt/local/bin/gar
  /opt/local/bin/gc++filt
  /opt/local/bin/gelfedit
  /opt/local/bin/gnm
  /opt/local/bin/gobjcopy
  /opt/local/bin/gobjdump
  /opt/local/bin/granlib
  /opt/local/bin/greadelf
  /opt/local/bin/gsize
  /opt/local/bin/gstrings
  /opt/local/bin/gstrip
(以下略)

lddの代わりは、otool -L

$ otool -L /bin/ls
/bin/ls:
	/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
	/usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)

'xterm-256color': unknown terminal type.

Mac OS X Lion のターミナルで、Ubuntu(8.04 LTS)を操作していたら、
'xterm-256color': unknown terminal type.
というエラーが発生。

# top
'xterm-256color': unknown terminal type.

■解決方法
Ubuntuに、ncurses-term パッケージをインストールする。

# aptitude search ncurses-term
p   ncurses-term                    - Additional terminal type definitions
# aptitude install ncurses-term

'xterm-256color': unknown terminal type. | Erik Osterman