カテゴリー別アーカイブ: Mac OS X

UNIX/Linux環境でFTPを再帰的に拾ってくる方法

こんにちは、岡田洋一です。

UNIX/Linux環境でFTPのディレクトリをまるごと取りたかったんです。が、ftpコマンドだとディレクトリを取ろうとしてもダメなんですね。

get somedirectoryってやるとNot a regular fileって怒られます。


shell> ftp ftp.example.com
Connected to ftp.example.com.
220 ::ffff:192.0.2.1 FTP server ready
Name (ftp.example.com:user): user
331 Password required for user
Password:
230 User user logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get tmp
local: tmp remote: tmp
550 tmp: Not a regular file

ディレクトリを再帰的に取りたい、っていう場合にはwgetを使うと良いようです。


shell> wget -r ftp://user:[email protected]//path_to_get/

多くの環境でインストールされているwgetで、ワンライナーで取得できるのはいいですね。

参考:  How do you recursively ftp a folder in linux

NIS, LDAPを用いた複数の環境でログインシェルを変更する

NIS, LDAPを用いた複数の環境でログインシェルを変更したかった。

現在自分の環境ではLDAPを利用している。ログイン情報をLDAPサーバに集約できるので非常に便利。LDAPではログイン時にユーザ名、パスワード(ハッシュ)などの情報を各ホストに提供するのだけれど、その中にはログインシェルも含まれる。

ログインシェルといえばUNIX系でよく使われるcsh, tcsh、Linux系でよく使われるbash、また高機能シェルとして名高いksh, zshなどがある。自分はzshをメインのシェルとしているのだけれど、LDAPのログインシェルの情報をzshに変更するだけでは問題がある。

まず一つ目はフルパス表記での問題だ。
ログインシェルは通常フルパスで表記される。これはシェルの初回立ち上げ時に~/.cshrc, ~/zshrcといった環境ファイルを読み込ませ、その段階でパスがセットされるからだ。つまりログインシェルの情報を取得して起動させる段階ではパスが通っていないことが想定される。そしてこのフルパス表記がOS毎に違ってくる可能性がある、ということが問題の核だ。
このシェルの実体、バイナリの実体が配置される場所は大まかに以下のようになる。Linux系ではrpm, yum, aptなどのパッケージ管理ツールでインストールした場合の/usr/bin/、デフォルトで配置される/bin/、ソースからインストールされた/usr/local/binである。
対してFreeBSDの場合、tcshやcsh, shなどの元々インストールされているバイナリは/bin/sh, /bin/tcshなどに配置されるが、後から手動でインストールされたバイナリは/usr/local/binに配置される。zshやbash(FreeBSDではbashがデフォルトで入ってこない)は/usr/local/binに置かれている訳だ。
この問題に関して言えば、インストール時にバイナリの配置場所を/usr/bin, /bin, /usr/local/binのいずれかに統一してしまう、若しくはシンボリックリンクを統一された場所に配置する、という解決方法が考えられる。でもこれらの作業をそれぞれのホストでいちいち実行するのは億劫だ。

二つ目の問題はデフォルトでインストールされるシェルが少ないことだ。自分の環境では主にFreeBSD、またDebian系(Ubuntu)、RHEL系(CentOS)、さらにはMac OS Xと数種類のOSを利用している。その中でデフォルトでインストールされるシェル、となると実は結構少ない。FreeBSDではcsh若しくはtcshをデフォルトシェルにする事が多い。対してLinuxではbashがデフォルトシェルとなることがおおい。そして残念な事にはFreeBSD/Linuxに於いては(t)csh/bashがお互いにデフォルトでインストールされていない。
ということはbashならbashをLDAPのデフォルトシェルにしてしまって、bashの環境ファイルである.bashrcなどでzshを呼び出す、という事ができない。

以上の点を踏まえながら試行錯誤していった結果、「UNIX/Linuxの両方に入っているシェルを使ってログイン時にzshにしてしまう」という方法にたどり着いた。ちなみにそのUNIX/Linuxの各種OSの最大公約数と言うべきシェルはsh。
shとはThompson shellを意味し、bashの前身となったシェルだ。過去にはバックスペースすら無かった気もするけれど、カーソルキーで入力位置を変更できない、コマンド履歴が使えないというシェルの基本的な機能のみしか持っていない素朴なシェルだ。
(とは言え、過去のbashも同様でデフォルトではコマンド履歴なども使えなかった気がしてbashとshのデフォルト状態での違いがあまり無いような状態だったんだけれど、最近のbashは使いやすいシェルっぽくなってる)
さてLDAPではこのshをデフォルトシェルにし、shが立ち上がった後にzshを呼び出すようにしてみる。

shでログインされた際に呼ばれる環境ファイルは “.profile”ファイルである。”.login”かと思ったんだけれどこれはshだと実行されないしcsh系だった気がする。つまりsh系ではダメということ。
この.profileファイルには直接shに実行して欲しいことを記述する。以下に例を示す。

[ -x /usr/local/bin/zsh ] && exec /usr/local/bin/zsh
[ -x /bin/zsh ] && exec /bin/zsh

shらしい記述で条件式を書き、それぞれのバイナリが存在し実行可能であればexecしてやる。execでシェルを呼び出せばログインシェルが切り替わった動作になるのでCtrl+Dなどでシェルを抜けたときにzshを支えているshも一緒にexitしてくれる。つまりログインシェルがzshになったようにみえてshを意識することが無い。

以上で思っていたようなzshなどのパスが違う環境でログインシェルを統一する、ということが可能になった。

めでたしめでたし。

Mac OS X 10.7.5でOpenLDAPを使って認証させたかった

0. 始めに

Mac OS X 10.7.5でOpenLDAPを使って認証させたかった。
うちのLANはUNIX系システムの認証にLDAPを利用している。全部で20〜30ホストぐらいあるのだけれど認証を一元化できるので非常に便利で助かっている。

ところでMacBookをもっているのだけれど、この認証もLDAPに参加できないかと思ってみた。画面共有だとかローカルユーザだとか、UIDを一致させたかった。ノートパソコンなので持ち出すことがある。なのでLDAPのスレーブにしてしまって親元サーバから認証情報をもらい、ローカルホストで認証を掛けようと思ってみた。
そこでまずはMac OS XなホストをLDAPクライアントにしてみた。これが意外にも大変だった。

続きを読む Mac OS X 10.7.5でOpenLDAPを使って認証させたかった

cronやプログラムでssh越しrsyncを利用するときにカナリ便利なオプション

1. 始めに

同期が必要な場面って結構ある。ローカルのディレクトリ間の同期はもちろん、特にインターネット越しの同期が必要になることって結構ある。

そんなときには決まってrsyncの出番だ。ファイルの変更を検知し、よしなに同期してくれる。そんな頼もしいrsync。枯れたソフトウェアなのでホスティングを借りたときにftpだけじゃなくてsshとrsyncが付いてきたりもする。すでに広まっているからすごく便利。

で、さて、そんな便利なrsyncなんだけれどcronなどで定期的、自動的にrsyncを実行するときにはチョットした問題があったりする。

その問題とは二点。一つはパスワード無しで認証を通す必要があること。もう一つはフィンガープリントと呼ばれるsshのホストの正当性を確かめる確認が出ること、だ。

この問題はどちらも、プログラムやcronなどプロンプト(よろしいですか?[y/n]的なアレ)を処理できない端末でrsyncを利用する際に解決しなければいけない問題。

前者のパスワード無しで認証を通すためにはsshの公開鍵認証を利用する。コレに関しては文献がいろいろとあるので参照されたし。

rsyncとsshで別のマシンにバックアップ

rsync over ssh を使ってバックアップ

さて、今回は二つ目の問題点、フィンガープリントのプロンプトを越えるためのオプションについて考える。環境としてsshクライアントとしてOpenSSHを想定している。他だとうごかないかも。

続きを読む cronやプログラムでssh越しrsyncを利用するときにカナリ便利なオプション

Macのsambaをマウントする時、濁点と半濁点が化ける

MacのsambaをLinuxでマウントしたら、濁点と半濁点が文字化けした。んで、その時の対応策。Windows7では化けなかった。

Mac側のsmb.confで

unix charset=UTF-8-MAC

を指定する。UTF-8-MACは、Appleがiconvを拡張した物らしいので、Mac以外でlibiconvを使っているソフトでは使えないらしい。

Linux側の/etc/fstabで

iocharset=utf8

を指定する。

Mac OS XのiTunesで異なるライブラリを切り替えたい

itunes-10-icon-500x5001. iTunesのプロファイル

現在、Mac Book Air(MBA)というノートパソコンを利用している。ここにiTunesという音楽再生ソフトが入っていてそれを利用しているんだけれど、ちょっと不便なことがあった。

yubird先生に相談したところ、プロファイルの切り替えが利用できるはずだからそれを利用してみろ、というアドバイスをもらったので試してみた。

続きを読む Mac OS XのiTunesで異なるライブラリを切り替えたい

subversion1.6から1.7に移行する手順

subversionのサーバをFreeBSDに変更したら、portsのsubversionがデフォルトで1.7になってたので、Linux,Macを含めて移行した。

dumpで1.6の旧サーバからバックアップ
旧サーバはUbuntu server 11.04

svnadmin dump /var/svn/レポジトリ名 | gzip > ./レポジトリ名.gz

新サーバのFreeBSDではデフォルトオプションでportsからsubversionをインストール。
svnユーザ,グループを作っておいて、svnルート以下の所有者をsvnにしておく

% sudo -u svn svnadmin create /var/svn/レポジトリ名
% gzip -dc レポジトリ名.gz | sudo -u svn svnadmin load /var/svn/レポジトリ名

んで、クライアント
Ubuntuだとパッケージにはまだ1.6しか無いので、ソースからコンパイル
http://ftp.riken.jp/net/apache/subversion/辺りからソースを落としてきて

% ./configure --enable-shared --without-berkeley-db
% make
% sudo make install

でrehashなりしたら1.7.1が使えるようになった

次にMac OS Lion
macportsにも1.7系はまだ無いので、Ubuntuと同じようにコンパイルした。

使えるようになったところで、1.6で管理されてたディレクトリで

% svn st
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy '/var/www/storage' is too old (format 10, created by Subversion 1.6)

とかしてみると、起こられる。言われるままに

% svn upgrade

を実行したら終わり

Mac OS X 10.7.1 Lion でマウスの加速を切る方法

Mac OS X 10.7.1 Lion でマウスの加速を切る方法。

Mac OSではマウスやトラックパッドの加速度周りの設定は一切ない。細かく設定したくともせいぜいマウスの移動速度やダブルクリックの速度までだ。

でもこれはWindowsを除く*nix系のX Window Systemでも同様のこと。

加速があると決まったマウスの移動量で決まったカーソルの移動量とならないのでストレスがたまっちゃう。なのでこれをオフにする方法。


shell> curl -O http://ktwit.net/code/killmouseaccel
shell> chmod +x killmouseaccel
shell> ./killmouseaccel mouse

Kill Mac OS X Mouse Acceleration from the command line

バイナリをktwit.netってトコロから落としてきて、それを実行する。引数にはmouseって与えればいいみたい。
ここに与えるデバイスの名前リストとかはちょっとわからなかった。

バイナリを配布してるサイトに行ってみたけれど、別段このバイナリに対する説明は見当たらなかった。元々はほかの名前で配布されていたものではないのかな、と勝手に推測。

この配布しているサイトが死んでしまうとちょっと困ってしまうので自分の手元でアーカイブする。