長いこと愛用している Yafc が Cygwin で提供されていないので自前でビルドしてみます。
Yafc とは Yet Another FTP Client の略で FTP クライアントの一種です。SFTP クライアントとしても利用できます。セキュリティにうるさい昨今では SFTP の方が一般的で FTP を使うことの方が稀でしょう。LFTP も有名ですが Yafc の方が好みです。
Yafc は libssh を利用しているので先に libssh をインストールします。Cygwin の setup.exe を実行するとパッケージ一覧に libssh2 が表示されますが libssh とは別物です。
libssh のインストール
libssh をコンパイルするにあたって事前に以下のパッケージをインストールしました。環境によっては他にも必要なパッケージがあるかもしれません。
libssh のコンパイルに必要なパッケージ:
- cmake
- gcc-g++
- openssl-devel
- zlib-devel
コンパイルには build ディレクトリを作成してその中で cmake, make を実行します。うまくいくと libssh が /usr/local/lib にインストールされます。
$ tar xvzf libssh-0.5.5.tar.gz
$ cd libssh-0.5.5/
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install
Yafc のインストール
これで本来の目的である Yafc のコンパイルにができます。Yafc の configure は TCGETS/TCSETS の存在をチェックしますが Cygwin には存在しません。回避策として TCGETA/TCSETA に置換します。影響度は不明ですが、特に不具合がなさそうなのでこれでよしとしました。また /usr/local/lib を RPATH にセットするので LDFLAGS にオプションをセットします。
$ tar xvJf yafc-1.2.4.tar.xz
$ cd yafc-1.2.4/
$ sed -i -e 's/TCGETS/TCGETA/g; s/TCSETS/TCSETA/g;' configure
$ CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib" ./configure
...
compiler ....................... gcc -std=gnu99 -g -O2
preprocessor flags ............. -I/usr/local/include
linker flags ................... -L/usr/local/lib -Wl,-rpath,/usr/local/lib
libraries ...................... -lreadline -lssl -lcrypto -lz -lssh -lssl -lcrypto -lz
installation prefix ............ /usr/local
using Kerberos 4 ...............
using Kerberos 5 ............... no, not found
using readline ................. yes
using ssh ...................... yes
using IPv6 ..................... no, not found
using NLS ...................... no, not found
$ make
$ make install
これで yafc.exe が /usr/local/bin にインストールされました。
SFTP クライアントとしてホストに接続するにはホスト名の前に ssh:// をつけます。
$ /usr/local/bin/yafc.exe ssh://hostname