lftp の使い方


SSHが使えない環境、FTPしかサポートしていないサービスにおいて、ファイルを安全にダウンロードしたい場合に何かいい方法ないかなーということで検索してみると、暗号化されたFTPであるFTPSというものがあるんだとか。
ということで今回は、FTPSをLinux等のコマンドライン上を使うことのできるlftpコマンドの備忘録。

事前準備

ftpではなくftps使ってくださいというような設定を事前に登録しておきます。
~/.lftprcに以下のように記述してください。

## aliasの設定
alias ls "ls -la"
##  通信の設定
set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-allow yes
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes

使い方

実際にログイン。その後、debugモードを使用することで通信の様子を詳しく見ていきます。

$ lftp
lftp :~> debug 10	# debugモードへ
lftp :~> open -u USERNAME Server-Address	#ログインします
notice: cannot open /home/****/.netrc: No such file or directory		# よくわかっていません。。。
Password:	#パスードの入力
---- Resolving host address...
---- 1 address found: ***.***.***.***

	# では実際に接続して、lsコマンドを実行してみます
lftp USERNAME@Server-Address:~> ls
---- dns cache hit
---- Connecting to Server-Address (***.***.***.***) port 21
<--- 220 ProFTPD 1.3.3a Server (Debian) [::ffff:***.***.***.***]
---> FEAT
<--- 211-Features:
<---  LANG en-US.UTF-8;en-US*
<---  MDTM
<---  MFMT
<---  TVFS
<---  AUTH TLS
<---  UTF8
<---  MFF modify;UNIX.group;UNIX.mode;
<---  MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
<---  PBSZ
<---  PROT
<---  SITE MKDIR
<---  SITE RMDIR
<---  SITE UTIME
<---  SITE SYMLINK
<---  REST STREAM
<---  SIZE
<--- 211 End
---> AUTH TLS
<--- 234 AUTH TLS successful		# TLSプロトコルによる接続をしているっぽい?
---> LANG	# 以下認証局の内容なので一部省略
Certificate:
 Issued by:
 Checking against:
  Trusted
Certificate:
 Issued by:
 Checking against: 
  Trusted
Certificate:
 Issued by:
  Trusted
<--- 200 Using default language en_US
---> OPTS UTF8 ON
<--- 200 UTF8 set to on
---> OPTS MLST modify;perm;size;type;UNIX.group;UNIX.mode;UNIX.owner;
<--- 200 OPTS MLST modify;perm;size;type;UNIX.group;UNIX.mode;UNIX.owner;
---> USER USERNAME
<--- 331 Password required for USERNAME
---> PASS XXXX
<--- 230 User USERNAME logged in
---> PWD
<--- 257 "/" is the current directory
---> PBSZ 0
<--- 200 PBSZ 0 successful
---> PROT P
<--- 200 Protection set to Private
---> PROT P
<--- 200 Protection set to Private
---> PASV
<--- 227 Entering Passive Mode (***,***,***,***,***,***).
---- Connecting data socket to (***.***.***.***) port *****
---- Data connection established
---> LIST -la
<--- 150 Opening ASCII mode data connection for file list
Certificate:
 Issued by:
 Checking against:
  Trusted		# 認証で問題なかったようです
Certificate:
 Issued by:
 Checking against:
  Trusted
Certificate:
 Issued by:
  Trusted		
---- Got EOF on data connection
---- Closing data socket
drwxr-xr-x   5 USERNAME     USERNAME         4096 Oct 14 19:44 .
drwxr-xr-x   5 USERNAME     USERNAME         4096 Oct 14 19:44 ..
<--- 226 Transfer complete
copy: get hit eof
copy: waiting for put confirmation
copy: put confirmed store
copy: get is finished - all done
lftp USERNAME@Server-Address:/>

では、次に実際にgetしてみます(今回はdebugモードは使用していません)。

lftp USERNAME@Server-Address:/> get ubuntu-12.04.1-alternate-i386.iso
`ubuntu-12.04.1-alternate-i386.iso' at 5111808 (0%) 772.1K/s eta:15m [Receiving data/TLS]  #ダウンロード中
get ubuntu-12.04.1-alternate-i386.iso	 #ダウンロード後
725921792 bytes transferred in 1057 seconds (670.5K/s)
lftp USERNAME@Server-Address:/>

ということで、これで問題なくFTPS接続できるかと思います。
FTPSを利用することでどのくらいファイル転送時の速度差が生まれてしまうかなんかいうデータは取っていないのでなんとも言えないですけど、体感的に約1/2程度の速度となるような気がします。ですが、やはりデータをFTPで普通にやり取りしてしまうのは危険すぎるよね…ということで今後はできるだけこっちを使う癖をつけていきたいところです。もちろんサポートされていなければ使えないんですけど。。。
また、lftpコマンドには"ミラーリング"なんて便利な機能もあるようなので必要に応じて今後は活用していきたいところですね。

IPアドレスの固定化


別にこれといった理由はないんですが、使うなら最新版がいいなーということで
Ubuntu Server 12.04を使っていたんですが、どうもIPアドレスの固定で詰まってしまい
時間を取られてしまったので、その際のメモを。

環境

Ubuntu 12.04 LTS

IPアドレスの固定化

$ cd /etc/network/interface
# cp interface interface.original

最初に上のような感じに念の為にコピーとっておきましょうねっと。


あとは、"/etc/network/interface"に設定内容を書いて行きましょう。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
- iface eth0 inet dhcp
+ iface eth0 inet static
+ address ***.***.***.***
+ netmask ***.***.***.***
+ gateway ***.***.***.***
+ dns-nameservers ***.***.***.***

# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

そして、設定を有効化するために再起動を行います。

# /etc/init.d/networking restart

なんですが、いつも私はシステム自体を再起動しておいた方がいいような気がして
再起動してしまう派だったりします。

# reboot


普通といえば、普通。当たり前と言えば当たり前のことなのかもしれませんけど、
ネットワークの設定すら出来ないと、遠隔で管理することも出来ないので…。
とくに、いつもの感じで書いてしまうのはDNSの設定ですね。
今までだと、結構あやふやな書き方でおkだった気がするんですがしっかり
"dns-nameservers"として指定しておくことが必要不可欠みたい。
たまにしかしないことですけど、忘れないようにしっかり覚えておかないとですね。


MacでOpenCL


Macといっても、山ライオンさんも公開されて
まだ使っている人がいるのか怪しい、Snow Leopardな私の環境のお話なんですが
もし参考になる人がいたら、というか自己満の備忘録を。

環境

Mac OS X 10.6.8 (Snow Leopard)

プログラム

まだまだ、プログラムの書き方は練習中…なので
ネット上に公開されているfor文を回したようなプログラムを使わせてもらいます。

ダウンロード

親切な方がGitHub上に公開しているので、お好きな方法でダウンロードして
ローカルに取ってきましょう。


  OpenCL-Getting-Started - GitHub


一番簡単な方法は、画面上のzipのアイコンをクリックしてローカルにダウンロード、解凍でしょうかね。

$ unzip smistad-OpenCL-Getting-Started-8bfa48e.zip
Archive: smistad-OpenCL-Getting-Started-8bfa48e.zip
8bfa48e61f9f5e5e17df3fe8bb6f63745fa58c2e
creating: smistad-OpenCL-Getting-Started-8bfa48e/
inflating: smistad-OpenCL-Getting-Started-8bfa48e/LICENSE
inflating: smistad-OpenCL-Getting-Started-8bfa48e/main.c
inflating: smistad-OpenCL-Getting-Started-8bfa48e/vector_add_kernel.cl

コンパイル

Snow Leopard以降のMac OSでは基本的にOpenCLをデフォルトでサポートしているようで
何も事前準備することなくコンパイルできるかと思います。
( あ、でも gcc コマンド等は必要になるかと思いますのでX Codeを入れておく必要はあるかも…。

ということで、解凍したフォルダの中に移動して早速コンパイル

$ cd smistad-OpenCL-Getting-Started-8bfa48e
$ gcc main.c -framework openCL

実行

$ ./a.out
0 + 1024 = 1024
1 + 1023 = 1024
2 + 1022 = 1024
3 + 1021 = 1024



1021 + 3 = 1024
1022 + 2 = 1024
1023 + 1 = 1024

参考にさせていただいたサイト

sshfsをつかってみる。


最近はメインで使っているUbuntu
Windowsで言うところの"WinSCP"的存在らしい"FileZilla"も使ってはみたんですが
やっぱりローカルにあるかのようにファイルを扱えた方が便利だなーと検索していたら
"sshfs"というものを見つけたので、その備忘録を。


今回の環境

Ubuntu 12.04
・SSHFS version 2.3

インストール

インストールはいつも通りaptitudeを使ってさくっと。

#aptitude install sshfs

設定

インストール後はsshfsが使用出来るように"fuseグループ"に利用するユーザを参加させます。
/etc/groupに以下のように赤字の部分を追加します。

fuse:x:104:利用したいユーザ名

追加したら、変更を有効にするためにシステムの再起動を。
再起動までする必要があるのかはよくわかっていませんけど…。Σ(´∀`;)

接続

最後に実際に接続してみましょう。
今回は、デスクトップ上に作成したmntフォルダにマウントしたいとします。
まずは、フォルダを作成して。

$ mkdir /home/nk87/Desktop/mnt

続いて以下のようにしてマウントを行います。

例)$ sshfs ユーザ名@利用したいサーバ名(IPアドレス): マウントしたい階層 マウントを行うディレクト
$ sshfs nk87@example-server: /home/nk87 /home/nk87/Desktop/mnt

という感じでしょうか。
逆にアンマウントしたい場合は、以下のように行います。

例)$ fusermount -u アンマウントしたいディレクト
$ fusermount -u /home/nk87/Desktop/mnt

だいたい同じところに何度も接続することが多いと思いますので、
先ほどのコマンドの内容をシェルスクリプトにでもして保存しおけば
コマンドを忘れてもサクサクっとマウント・アンマウントできるのではないでしょうか?(・∀・)
(だた、自動的にマウントする方法がわからなかっただけなんですけども。w



参考にさせていただいたサイト

sshで他マシンのファイルシステムをマウントするには - @IT

Gemのアップデート

Debian環境でgemを最新版にアップデートしようとすると、

$ sudo gem install -update
ERROR: While executing gem ... (OptionParser::InvalidArgument)
invalid argument: -pdate
$ sudo gem update --system
ERROR: While executing gem ... (RuntimeError)
gem update --system is disabled on Debian, because it will overwrite the con
tent of the rubygems Debian package, and might break your Debian system in subtle ways. The Debian-supported way to update rubygems is through apt-get, using Debian official repositories.
If you really know what you are doing, you can still update rubygems by setting the REALLY_GEM_UPDATE_SYSTEM environment variable, but please remember that this is completely unsupported by Debian.

という感じに怒られてしまいますので、その際の対処法をメモしておきたいと思います。

環境

アップデート

今回も参考にさせていただいたサイトそのままなのでログだけですが
問題なくアップデート出来ると思います。

$ gem -v
1.3.7
$ sudo gem install rubygems-update
Successfully installed rubygems-update-1.8.24
1 gem installed
Installing ri documentation for rubygems-update-1.8.24...
Installing RDoc documentation for rubygems-update-1.8.24...
$ sudo rubygems_update
sudo: rubygems_update: command not found
$ gem environment|grep EXECTAVBLE
$ gem environment|grep EXECUTABLE
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
$ sudo /var/lib/gems/1.8/bin/update_rubygems
RubyGems 1.8.24 installed

== 1.8.24 / 2012-04-27

* 1 bug fix:

* Install the .pem files properly. Fixes #320
* Remove OpenSSL dependency from the http code path

                                                                                                                                                          • -

RubyGems installed the following executables:
/usr/bin/gem1.8

$ gem -v
1.8.24

Xcode3をインストール。(Snow Leopard)

今更、Snow Leopardを使っている方がアレなのかもしれませんけど、
2,600円が惜しくてLionにバージョンアップできてない貧乏学生なんです。(´・ω・`)


で、今回はRubyのgemを使おうとしたら"makeコマンド"がないとダメ…的なエラーに遭遇してしまったので
( この話はまた別のエントリーで書くとして。
今更なんですけども、今でもまだインストール出来ますよ! ということで備忘録を。


環境

  • Mac OSX 10.6.8
  • Xcode 3.2.6

インストールファイルのダウンロード

まずは、インストールファイルを取ってきたいと思います。
Xcodeのインストールファイルをダウンロードするためには、Apple Developer登録が必要なようです。
( 登録が嫌な場合は、付属のDVD等を利用する方法もあるんですけどね。
これは無料で出来るようなので、他のサイトでぐぐってください。w

アカウントが登録できましたら、"iOS Dev Center"にアクセスします。



すると中程に小さくではありますけど、ちゃんと書いてありますね。
ということで、こちらからダウンロードします。
4.1GBほどありますので、気長に待ちましょう。

インストール

インストールに関しては特に何も言うことはないと思いますが、
先程ダウンロードした"dmgファイル"をダブルクリックでマウントしまして、
"Xcode and iOS SDK"をダブルクリック、あとは手順通りに進めば
またまた気長に待つ必要がありますが、問題なくインストールが完了すると思います。

ただし

私がインストール中に遭遇したんだけなのなのかもしれませんが、最後に注意点を。
インストール途中で、

In order to continue installation, please close the following application:
iTunes

と出てきて、インストールが中断されてしまいます。
かと言って、iTunesの部分をクリックしてもiTunesが立ち上がってしまって…!!???


とならないように、Windowsでいうタスクマネージャ的なものから、iTunesの"ヘルプ"を終了させます。
"アプリケーション"→"ユーティリティ"→"アクティビティモニタ"を開きます。

必要ないかもしれませんが、
右上の"フィルタ"と書かれている検索バー横のプルダウンメニューから"すべてのプロセス"を選択し
検索バーに

itunes

と入力すると、

iTUnes Helper

が出てくると思いますので、これを選択して"プロセスを終了"をクリックすればインストールが再開されると思います。


最後に

Xcodeは、アプリケーションフォルダではなく
"Macintosh HD"→"Debeloper"→"Applications"フォルダ内にあると思いますので
確認してみてください。


Barracudaをつかってみる。

最近興味のあるOpenCL


そんなOpenCLを使ってみましょう言うことで。
またまた最近興味のあるRubyからOpenCLを使える
そんなラッパーの一つに"Barracuda"というものがあるそうで。
今回はこちらを使ってみましたので、その際の環境構築等備忘録を。


環境

gemのインストール

Macでは初めからRubyが使えますので、そこは置いておいて。
gemを利用してBarracudaをインストールしていきたいと思います。

といっても、まずはgemのインストールからですね。
こちらは、便利なものがよくわからなかったので最新版をソースから入れたいと思います。

RubyGems - RubyForge

ダウンロードしたものを、

$ unzip rubygems-1.8.24.zip

と解凍して

$ cd rubygems-1.8.24

フォルダ内に移動。
続けて、

$ ruby setup.rb

とコマンドを入力してgemのインストールが完了します。


試しに実行してみると、

$ gem -v
1.8.24

という感じに表示されるのではないでしょうか?


Barracudaのインストール

gemが使えるようになっていると思いますので、あとはサクっと。

# gem install barracuda
Building native extensions. This could take a while...
Successfully installed barracuda-1.3
1 gem installed
Installing ri documentation for barracuda-1.3...<省略>
Installing RDoc documentation for barracuda-1.3...<省略>

こんな感じで、問題なくインストール出来るかと思います。

ただし!

私同様、事前にXcodeをインストールしていない環境で、
gemからでも、ソースコードからでも、インストールしようとすると

sudo gem install pkg/barracuda-1.3.gem --local
Building native extensions. This could take a while...
ERROR: Error installing pkg/barracuda-1.3.gem:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/barracuda-1.3 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/barracuda-1.3/ext/gem_make.out
rake aborted!
Command failed with status (1): [sudo gem install pkg/barracuda-1.3.gem --l...]
/Users/nk87/Desktop/var/barracuda/Rakefile:27
(See full trace by running task with --trace)

このようなエラーが表示されますので、同様の症状の場合には今一度確認してみてください。
Xcodeを入れていないために、"makeコマンド"が無いよー"という理由で起こっているエラーのようです。


Xcodeのインストールに関しては、一つ前のエントリーをどうぞ。


動かしてみる。

最後に、gistに上がっているソースコードを利用させていただいて実際に動かしてみましょう。
gitの使い方はまた別のお話ということで、ここはさくっとログだけで省略させて下さい。w
https://gist.github.com/953378 - r7kamura

$ git clone git://gist.github.com/953378
Cloning into '953378'...
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 13 (delta 5), reused 0 (delta 0)
Receiving objects: 100% (13/13), done.
Resolving deltas: 100% (5/5), done.
$ cd 953378/
$ ruby openCLwithBarracuda.rb
Rehearsal ---------------------------------------
cpu 39.950000 0.310000 40.260000 ( 51.416458)
gpu 0.260000 0.500000 0.760000 ( 4.652000)

                                                          • total: 41.020000sec

user system total real
cpu 40.000000 0.300000 40.300000 ( 50.067372)
gpu 0.250000 0.500000 0.750000 ( 4.479616)

異様にスコアが悪いのは、裏でいろいろ立ち上げてるだけなんだからね。><
っていう言い訳も置いておいて、私のMacBookPro(Mid 2010)で実際に実行した結果になります。


おわりに

こんな感じに使えるようですが、具体的にどのようにプログラムを書くのとか
まったく理解できていないので、今後の課題ですね。。。
OpenCL、WebCL…この辺りついてもう少し詳しく調べていきたい今日この頃です。