curl

2015年03月27日

このエントリーをはてなブックマークに追加

個人作業環境を一撃セットアップ

身近なメンバーに説明する手頃な材料が欲しかったので、本エントリを書いた。

作業ノードを転々としていると、各所に作業環境を構築する回数が多くなる。作業対象が使い捨てである事が増えれば増える程、その傾向が強くなった。構築回数が多いからこそ、整理する機会に恵まれていたとも言う。その結果、今ではログイン後に下記コマンド1行を実行するだけだ。

$ curl -fSkL https://raw.githubusercontent.com/hansode/env-bootstrap/master/build-personal-env.sh | bash

build-personal-env.shの処理を掘り下げて行く。

build-personal-env.sh 処理概要

  1. mkdir -p ${HOME}/repos/git/github.com
  2. hansode/dotfiles${HOME}/repos/git/github.com/に配置
    1. cd ${HOME}/repos/git/github.com/ && make
    2. make 実行により、自分好みのdotfilesが配置・セットアップされる

dotfilesdotfileだけを管理し、env-bootstrapdotfilesをセットアップする。dotfilesにセットアップスクリプトを置いても良いが、役割分担を明確にする為にも別プロジェクトで管理している。今(2015/03/27現在)は、たまたまdotfilesしか扱ってないが、他のプロジェクトを扱いたい場合は、今の様に役割分担してる方が柔軟な管理が可能。かつては別プロジェクトを扱っていた経緯がある。

dotfilesが環境を判定

作業対象は複数あり、プラットフォーム毎に必要なdotfileが異なって来る。

  • Cygwin 1.7 / Windows 8.1
  • MacOS 10.10 (Yosemite)
  • Raspbian 7.6 (Wheezy)
  • Fedora release 20 (Heisenbug)
  • CentOS-6.6/6.5/6.4
  • CentOS-7.0.1406

例えばCygwin環境にはDropboxをインストールしているので、Cygwinのホームディレクトリからアクセスしやすいようにしている。また、CygwinとMacOSでは、Vagrantを扱う事があるので、Vagrant環境を整理している。

自身の${HOME}構造を標準化

build-personal-env.shが配置するdotfileswork/repos/git/github.com/dotfiles配下。これは自分だけのルールであり、第三者に強制されるものではない。長年の経験から程よく管理しやすい構造として辿り着いた構造は、下記の通り。

まとめ

自分が実施して来た手順を整理すると、こうなる。

  1. dotfilesを整理する
  2. dotfilesをセットアップするスクリプトを管理
  3. ${HOME}構造を標準化する
  4. 1〜3を繰り返す

自分は上記順序で整理して来たが、1〜3の順序に根拠や強制力は無い。整理出来そうな所から整理すれば良い。重要なのは、整理する事だ。

関連成果物




編集
@hansode at 19:30|PermalinkComments(0)TrackBack(0)

2011年09月12日

このエントリーをはてなブックマークに追加

参考比較: 単発curl v.s. 100分割curl

参考値とは言え、約21倍性能が増した。

内容所要時間
単発2,226秒
100分割103秒

ネットワーク帯域や検証マシンスペックによっては、もっと顕著な差が生まれるかも知れない。

検証内容
単発curl
$ time curl -s -L -o textinstall-134-x86.iso http://dlc.sun.com/osol/install/downloads/text_install/134/textinstall-134-x86.iso

real    37m6.561s
user    0m1.216s
sys     0m45.667s
100分割curl
$ time ./pararell-curl.sh http://dlc.sun.com/osol/install/downloads/text_install/134/textinstall-134-x86.iso
...(省略)...

real    1m43.885s
user    0m3.576s
sys     0m32.038s
検証環境
  • Ubuntu 10.04.3 LTS
  • bash 4.1.5
  • curl 7.19.7
レシピ
  1. 何並列で実行するのか決めておく。今回は100本。
  2. ダウンロード対象のContent-Length取得
  3. Content-Length値をもとに、curlコマンドの --range オプション でcurlコマンド毎に担当範囲を指定し、バックグラウンドジョブとして実行。

    man curlより

           -r/--range 
                  (HTTP/FTP/SFTP/FILE)  Retrieve a byte range (i.e a partial docu‐
                  ment) from a HTTP/1.1, FTP or  SFTP  server  or  a  local  FILE.
                  Ranges can be specified in a number of ways.
    
                  0-499     specifies the first 500 bytes
    
                  500-999   specifies the second 500 bytes
    
                  -500      specifies the last 500 bytes
    
                  9500-     specifies the bytes from offset 9500 and forward
    
                  0-0,-1    specifies the first and last byte only(*)(H)
    
                  500-700,600-799
                            specifies 300 bytes from offset 500(H)
    
                  100-199,500-599
                            specifies two separate 100-byte ranges(*)(H)
    
  4. 全ジョブが完了するまで待機
  5. 分割ダウンロードされたファイルを結合
ソースコード

レシピをもとにラッパースクリプトを作成。

使い方

第一引数を指定しない場合、CentOS 6.0のISOイメージがダウンロード対象となる。

$ git clone git://gist.github.com/1205668.git
$ ./pararell-curl.sh
$ ./pararell-curl.sh http://mirror.3tier.com/centos/6/isos/i386/CentOS-6.0-i386-bin-DVD.iso
参考文献
あと書き

分割によってこれほどの性能差が生まれるとは思っても見なかった。

続きを読む


編集
@hansode at 15:50|PermalinkComments(0)TrackBack(0)

2010年07月26日

このエントリーをはてなブックマークに追加

PHPからcurlを使うと何が良いのかは不明

要望があったので設定。

▼検証環境

  • Ubuntu-8.04 LTS
  • Linux 2.6.24-6-xen

▼環境構築


$ sudo apt-get install php5-curl
$ sudo /etc/init.d/apache2 restart

▼テストコード


<?php

if ($ch = curl_init('http://www.google.com/')) {
  echo curl_exec($ch);
  curl_close($ch);
}

この場合、Googleのトップページが表示されれば良い。




編集
@hansode at 14:40|PermalinkComments(0)TrackBack(0)