ラベル Mac OS X の投稿を表示しています。 すべての投稿を表示
ラベル Mac OS X の投稿を表示しています。 すべての投稿を表示

2013年10月1日火曜日

Mac OS X Mountain Lion で RaspberryPi とシリアル接続する

前回の記事、FreeBSD on RaspberryPi でシリアルコンソールを使用するでは、FreeBSD box と FreeBSD on RaspberryPi とのシリアル接続でしたが、この記事では、Mac OS X Mountain Lion と FreeBSD on RaspberryPi とのシリアル接続を扱います。

RaspberryPi の設定などは全く同じですが、記事の読みやすさを考慮して、こちらにも手順を再掲します。

RaspberryPi でシリアル接続をするのに、今回使用しているのは、GPIO に直接差して使うタイプの、3線式 USB シリアル変換ケーブルです。ケーブルの色などはお持ちのものに適宜読み替えてください。


1: RaspberryPi にシリアルコンソールの設定をする

  1. /boot/loader.rc の先頭に以下の設定を追加します。
    \ use serial console
    set boot_multicons="YES"
    set boot_serial="YES"
    set comconsole_speed="115200"
    set console="comconsole,vidconsole"
    
  2. /etc/ttys に以下の設定を追加します。crochet でイメージを作ると恐らくこのエントリーは入っているはずなので、その場合は、デフォルトでは dialup になっている部分を vt100 に修正します。
    ttyu0   "/usr/libexec/getty 3wire.115200"       vt100   on secure
    

2: RaspberryPi にケーブルを差す

RaspberryPi の GPIO に間違えないように注意しながらケーブルを差します。

PaspberryPi は一旦シャットダウンして電源を切っておくことを強くお勧めします。

GPIO が RaspberryPi の右上にくるように見た場合、左側の列の一番上がピン番号 1、右側の列の一番上がピン番号 2 なので、右側の上から 3 番目が 6:GND, 4 番目が 8:TX, 5番目が 10:RX です。

OLIMEX のケーブルは、GNDは青、RX(INPUT)はグリーン、TX(OUTPUT)は赤、とリンク先に書いてありますので、青 (GND) を 3 番目、グリーン (RX) を 4 番目、赤 (TX) を 5 番目に差します。RX、TX をクロスにするのがポイントです。尚、上から 1,2 番目は 5V ですので、うっかり間違えないように注意しましょう。

3: Mac OS X に USB シリアル用デバイスドライバを追加する

Mac OS X 用の Prolific PL2303 のデバイスドライバは、Prolific のサイトからダウンロードすることができます。

PL2303 Mac OS X Driver Download http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41

今回は、md_PL2303_MacOSX-10.6up_v1.5.1.zip をクリックしてダウンロードします。

ダウンロードしたファイルはダブルクリックして解凍し、PL2303_MacOSX_v1.5.1.pkg をクリックしてインストールします。

この時点で USB ケーブルを差してみて、RaspberryPi に電源を投入し、双方でシリアル USB がきちんと認識されるかどうかと、作成されるデバイスファイル名を確認します。デバイスファイルは、/dev の下に、 Max OS X 側には cu.usbserial と tty.usbserial、RaspberryPi 側には cuau0 と ttyu0 ができているはずです。

また、以下のコマンドを RaspberryPi 側で実行することで、シリアル出力のプロセスが正しく動作しているかどうかを確認することができます。

% ps -axww | grep getty
1275 u0  Is+  0:00.03 /usr/libexec/getty 3wire.115200 ttyu0
1271 v0  Is+  0:00.03 /usr/libexec/getty Pc ttyv0
1272 v1  Is+  0:00.03 /usr/libexec/getty Pc ttyv1
1273 v2  Is+  0:00.03 /usr/libexec/getty Pc ttyv2
1274 v3  Is+  0:00.03 /usr/libexec/getty Pc ttyv3

4: Mac OS X に minicom をインストールする

Mac OS X ではデフォルトで screen が使えるので、別にこれでもいいや、という人は特にインストールする必要はありません。
screen でシリアル接続をするのであれば、

% screen /dev/tty.usbserial 115200

で RaspberryPi とシリアル接続することができます。

しかし、わたしは、screen でシリアル接続して RaspberryPi にビルドさせている時に、ビルド中にエラーが発生すると、なぜかその時画面に出力されていたビルドログだけが画面表示から消えてしまうが、シリアル接続は切れていない、という謎現象に悩まされたため、結局 Mac OS X でも minicom を入れることにしました・・。

まず、ソースコードをダウンロードします。

minicom http://alioth.debian.org/projects/minicom/

ページの中ほどにある「最新ファイルリリース」の download のアイコンをクリックすると、ファイルリストのページに飛びますので、Latest version と表示されているバージョンの tar.gz ファイルをクリックしてダウンロードします。今回は、minicom-2.6.2.tar.gz をダウンロードしました。

ダウンロードしたら、クリックして解凍します。Mac って便利ですよね。

解凍したら、以下を実行します。
尚、Mac OS X Mountain Lion では、以下のコマンドの実行には、Xcode 及び、Command Line Tools ( Xcode の Preferences からインストール) が必要となります。

% cd Downloads/minicom-2.6.2
% ./configure
% sudo make
% sudo make install

デフォルトでは、/usr/local/binにインストールされますので、/usr/local/bin へのパスは通しておきましょう。

5: minicom の設定をする

ここで minicom の設定をします‥。いきなり起動しようとすると、おそらくエラーになりますので注意です。

% sudo minicom -s
            +-----[configuration]------+
            | Filenames and paths       |
            | File transfer protocols     |
            | Serial port setup             |
            | Modem and dialing          |
            | Screen and keyboard      |
            | Save setup as dfl            |
            | Save setup as..               |
            | Exit                                 |
            | Exit from Minicom           |
            +------------------------------+

こんな画面が表示されて、カーソルキーでメニュー選択ができます。英語な分表示が崩れないので、まだ、いろんな意味でだいぶんましです。

その中の、「Serial port setup」を、それぞれ、以下の内容に修正する必要があります。頭のアルファベットを選ぶと該当の部分にカーソルが飛びますので、なんとか目的の内容になるように入力してください。
尚、シリアルデバイスのパスはご自分の環境にあわせてください。多分このままで大丈夫だとは思いますが。

A - Serial Device
/dev/tty.usbserial
E - Bps/Par/Bits
115200 8N1
F - Hardware Flow Control
No
G - Software Flow Control
Yes

全ての設定を終えたら、「Save setup as dfl」して終了します。もしくは、「Save setup as..」で任意の設定ファイルを指定して終了することもできますが、その場合は起動するときに設定ファイルを指定して起動する必要があります。

6: minicom を起動する

設定が全て完了したら、後はただ起動するだけです。

% minicom

自分で設定ファイルを指定した場合は

% minicom -o 設定ファイル名

特に問題なければ以下のようなメッセージが画面に表示されます。

Welcome to minicom 2.6.2

OPTIONS:                                                                     
Compiled on Oct  1 2013, 12:24:06.                                           
Port /dev/tty.usbserial, 14:39:02                                            
                                                                             
Press CTRL-A Z for help on special keys 

こんな感じに表示されたら、あとはシリアルコンソールを使うだけです。

RaspberryPi が起動済みであれば、このあとエンターキーを押したりすれば、ログインプロンプトが表示されるはずなので、無事にログインできれば ok です。

念のため RaspberryPi を再起動してみて、無事に起動メッセージが表示されるかどうか確認してみるといいでしょう。

2013年8月6日火曜日

Mac OS X Mountain Lion で smb ファイルサーバのマウントをする

Mac OS X Mountain Lion で smb ファイルサーバのマウントをするやり方のメモです。

ここでは、仮に以下の内容で接続するものとします。

ホスト名 : hoge
IP アドレス : 10.0.0.2
ディレクトリ名 : hoe
ユーザ名 : user

一番簡単なやり方では、finder を使用します。
finder の メニュー、「移動」の一番下にある「サーバに接続...」を選択し、サーバアドレスの欄に、
smb://サーバのホスト名、もしくは ip アドレス
を指定します。

ですので、この場合は、
smb://hoge
もしくは
smb://10.0.0.2
となります

マウントしたいディレクトリを直接指定したい場合は、
smb://サーバのホスト名、もしくは ip アドレス / ディレクトリ名
でディレクトリをマウントすることができます。

この場合は、以下の通りになります。
smb://hoge/hoe
もしくは、
smb://10.0.0.2/hoe

あとは finder が、必要なユーザ名やパスワードの入力を求めてきますので、 それに従って入力することで、GUI で smb ファイルサーバに接続することができます。

接続の切断は、finder メニューの「ファイル」か、表示されているアイコンを右クリックして「"hoe" を取り出す」を選択します。

でも、finder じゃなくて、直接コンソールでマウントしたいこともありますね。
ファイルの権限変更したい時とか。

その場合は、mount_smbfs というコマンドを使用します。

まず、あらかじめ、マウントポイントを用意する必要がありますので、 適当なディレクトリを用意します。
ここでは、ホームディレクトリに mnt というディレクトリを用意します。

% cd
% mkdir mnt

そうしたら、おもむろに、

% mount_smbfs //user@hoge/hoe ./mnt
もしくは、
% mount_smbfs //user@10.0.0.2/hoe ./mnt
( 必要であればここでパスワードの入力が求められます )

特に何も表示されなければ、問題なくマウントされたはずなので、df コマンドで確認します。

% df
Filesystem       512-blocks      Used  Available Capacity  iused      ifree %iused  Mounted on
/dev/disk0s2     1951845952 191396920 1759937032    10% 23988613  219992129   10%   /
devfs                   368       368          0   100%      638          0  100%   /dev
map -hosts                0         0          0   100%        0          0  100%   /net
map auto_home             0         0          0   100%        0          0  100%   /home
//user@hoge/hoe  578166916  85595336  492571580    15%        0 18446744073709551615    0%   /Users/user/mnt

のような感じで表示されたら mount に成功です。

% cd mnt
% ls

で内容がきちんと表示されれば、あとは、通常のファイルシステムと同様に利用することができます。

もし、マウントコマンド実行時に、

mount_smbfs: mount error: /Users/user/mnt: Input/output error

のようなエラーメッセージが出力されたら、対象のサーバを既にマウントしていないかどうか確認してみてください。

% df

で確認できます

さて、必要な作業が完了したら、アンマウントしましょう。
アンマウントは

% umount ./mnt

で実行できます。

umount(/Users/user/mnt): Resource busy -- try 'diskutil unmount'

のようなエラーメッセージが出力されたら、自分が今いるパスがマウントしたパスの中なら、ホームディレクトリに戻るなどしてから再度実行してください。

ちなみに、finder も結局のところマウントを実行しているわけなので、一体どこにマウントしているのかというと、

% df
Filesystem       512-blocks      Used  Available Capacity  iused      ifree %iused  Mounted on
/dev/disk0s2     1951845952 191397960 1759935992    10% 23988743  219991999   10%   /
devfs                   368       368          0   100%      638          0  100%   /dev
map -hosts                0         0          0   100%        0          0  100%   /net
map auto_home             0         0          0   100%        0          0  100%   /home
//user@hoge/hoe  578167248  85595338  492571910    15%        0 18446744073709551615    0%   /Volumes/hoe

なので、実は、"/Volumes/ マウント先のディレクトリ名" に直接 cd すれば、いちいち手動でマウントしなくても、ちゃんとターミナルから操作できるという、しょうもない落ちなのでした・・。

2013年7月24日水曜日

Mac OS X Mountain Lion で OpenSSH をビルド・インストールする ( 作業メモ )

先日 Mac OS X Mountain Lion から RaspberryPi(FreeBSD) に ssh 接続しようとすると、RaspberryPi 側から接続がはねられる(Connection colosed by host)という現象に悩まされました。

鍵交換アルゴリズムが hmac-sha1 だとダメで、hmac-md5-xx だと OK のようだ、という情報を得たので、

% ssh -m hmac-md5 host-ip-address
Connection closed by host-ip-address
% ssh -m hmac-md5-96 host-ip-address
Connection closed by host-ip-address

( 認証は公開鍵暗号方式で、ホストには公開鍵を登録済 )

とやっぱりダメです。 ターミナルで確認すると、デフォルトで Mountain Lion に入っている OpenSSH のバージョンがそもそも結構古いです。

% which ssh
/usr/bin/ssh
% ssh -V
OpenSSH_5.9p1, OpenSSL 0.9.8x 10 May 2012

ちなみにこの記事時点での最新は以下の通りで、FreeBSD 側はこれです。

raspberry-pi% ssh -V
OpenSSH_6.2p2, OpenSSL 1.0.1e-freebsd 11 Feb 2013

そこで、試しに Mac OS X の OpenSSH をソースコードからビルドインストールしてみることにしました。

尚、Mac OS X Mountain Lion でこの作業を行うには、Xcode 及び、Command Line Tools ( Xcode の Preferences からインストール) が必要となります。
現在は Command Line Tools はどうもターミナルから以下のコマンドを入力しないとインストールできないようです。

% xcode-select --install

1:OpenSSH のソースコードを取得する

まず、OpenSSH のミラーサイトからソースコードを取得します。
Portable OpenSSH のページの下の方にダウンロード用のミラーサイト一覧があるので適当なものを選択してダウンロードします。

今回は現時点の最新である openssh-6.2p2 をダウンロードしようとしたら、 最初に開いたミラーサイトにはなぜか存在しませんでした。こんなこともあるんですね。 次に開いたミラーサイトには存在したので、そちらからダウンロードしました。

ダウンロードした openssh-6.2p2.tar.gz をダブルクリックで解凍します。
本当はファイルの正真性を確認すべきなのでしょうが、ここでは省略します。
興味が有る方は入門OpenSSH 2.3.2. ダウンロードしたパッケージの正真性を確認する を参考にするとよいでしょう。

2:OpenSSL のソースコードを取得する

合わせて OpenSSL も更新するため、こちらも OpenSSL のソースコードダウンロードページから現時点での最新版 openssl-1.0.1e をダウンロードします。 最新版は[LATEST]と表示されています
ダウンロードした openssl-1.0.1e.tar.gz をダブルクリックで解凍します。

3:OpenSSL をコンパイル、インストールする

OpenSSH は ssl に依存していますので、 最初に OpenSSL を ビルド・インストールします。
ターミナルを立ち上げて、

% cd Downloads/openssl-1.0.1e

64bit 版 Mac の場合は、./Configure darwin64-x86_64-cc を使用して構成します。
32bit 版 Mac の場合は、通常通り ./config を使用します。
他の ssl とかぶらないインストール場所を --openssldir でオプション指定します。今回は /usr/local/openssl を指定しています。また、共有ライブラリオプション shared をつけています。

% ./Configure darwin64-x86_64-cc --openssldir=/usr/local/openssl shared
% make
% sudo make install

4:OpenSSH をコンパイル、インストールする

無事に終了したら、いよいよ本命の OpenSSH の ビルド・インストール です。

% cd ../openssh-6.2p2

今回は、/usr/local 以下にインストール、PAM サポート有効、MD5 形式パスワードサポート、 zlib のバージョンチェックなし、ssl は先ほどインストールした OpenSSL を使用、で build することにするため、 以下のオプションを付けて configure スクリプトを実行します。
インストール先はデフォルトで /usr/local になっているため、今回は特に指定しませんが、/usr/local 以外にインストールしたい場合は、別途 --prefix オプション等で指定します。
OpenSSL を今回のように新規でインストールしない場合でも、システム上に複数の ssl が存在していると Your OpenSSL headers do not match your library. のようなエラーを吐いて終了してしまうので、その場合は --with-ssl-dir で ssl のディレクトリを指定する必要があります。

% ./configure --with-pam --with-md5-passwords --without-zlib-version-check --with-ssl-dir=/usr/local/openssl
% make
% sudo make install
% rehash

5: 環境変数 PATH の修正をする

インストールが完了したら、今後 ssh クライアントを使用する際は、 /usr/local/bin のものを優先的に使用したいため、環境変数の設定をする必要があります。 要は PATH の先頭に、/usr/local/bin が入っていればいいわけなので、

% printenv

で表示される PATH の値を確認して、問題なければ修正をする必要はありません。 わたしの環境では以下の状態でした。

 
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Mountain Lion 以前では環境変数の修正をする場合は ~/.MacOSX/environment.plist に設定すれば良かったらしいのですが、Mountain Lion からはこのファイルが使えなくなった(!)そうなので、
今回は代わりに、 /etc/paths を修正します。

尚、OpenSSL も今回インストールするバージョンに切り替えるのであれば ( いろんな意味でそのほうが良いでしょう )、 /usr/local/openssl/binも合わせて追加する必要があります。

現在の内容を確認すると

% more /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

これを、

% sudo vi /etc/paths

で以下のように修正し、保存して終了します。

/usr/local/openssl/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

一旦再起動します。
再びコンソールから環境変数の確認をします。

% printenv
PATH=/usr/local/openssl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

これで PATH が修正されました。

6:インストール後のバージョンを確認する

ここで、正しくインストールが実行されたか、ssh のバージョンを確認します。

% which ssh
/usr/local/bin/ssh
% ssh -V
OpenSSH_6.2p2, OpenSSL 1.0.1e 11 Feb 2013
% which openssl
/usr/local/openssl/bin/openssl
% openssl version
OpenSSL 1.0.1e 11 Feb 2013

上記のように表示されれば、無事 update に成功となります。

sshd を起動済みの場合は、システム環境設定のインターネットとワイヤレスの共有から、リモートログインのオンオフをすれば sshd が再起動します。

ちなみに、この update で、無事に Mac OS X Mountain Lion からも、 RaspberryPi(FreeBSD) に ssh 接続できるようになりました。