• GulpでCSS/JavaScriptコンパイル環境を構築する ─ CentOS編

    従来、WEBフロントエンドの主要アセットであるCSSとJavaScriptはソースレベルでなかなか管理しづらく、すぐにカオスな領域に突入して保守しづらくなっていました。そのカオスな領域にあるCSSやJavaScriptをソースレベルでもっと保守管理しやすいように生み出されたのがGruntやGulpというコンパイルビルドの仕組みです。今の世の流れ的に、フロントエンド開発ではSCSS(SASS、LESS等)、CoffeeScriptなどでCSSやJavaScriptのコーディングを効率化しつつ、同時にソースの保守管理をし易くするという開発手法がデフォルトになってきました。 実際にLESSで変数を使ったCSSスタイリングや、コード量が劇的に少ないCoffeeScriptでJavaScriptを書いてみると、圧倒的なコード生産性の高さに、もはや今までのベタなフロントエンドコーディング手法は改めざるを得ないという境地になります。 ──と云うことで、早速CSS/JavaScriptのコンパイルビルドを行う環境をサービス提供用のCentOSサーバに作ってみようかと思います(ローカル開発環境としてのWindowsマシンへの導入はこちらの記事を参照)。

    ちなみに、Gulpは「ガルプ」と読みます。私は最初「グループ」とか読んでました…(笑)

    Node.js のインストール

    まずはGulpはnode.jsのモジュールなので、node.jsをインストールしないことには始まりません。そんな訳で、node.jsをインストールするのですが、まずはnode.jsやライブラリのバージョン管理モジュールであるnvmからインストールしていきます。 下記のように、nvmをGitHubからクローンして同梱のシェルでインストールします。

    $ git clone git://github.com/creationix/nvm.git ~/.nvm
    $ . ~/.nvm/nvm.sh
    

    次に、node.jsをインストールするのですが、その前に現在のnode.jsの安定バージョンを Node.jsの公式サイト を確認しましょう。TOPページの真ん中あたりに「Current Version: v0.12.2」というように記載されているので、そのバージョンをインストールするのが無難です(2015年4月7日時点のNode.jsの安定バージョンは0.12.2でした)。 インストールバージョンが決定したら、nvmでインストールします。

    $ nvm install v0.12.2
    $ node -v
    v0.12.2
    

    バージョン確認してインストールバージョンが表示されればOKです。 最後に、自分のコンソール環境でnode.jsが利用できるように .bashrc に以下の記述を追記しておきます。

    $ vim .bashrc
    $ cat .bashrc
    # .bashrc
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi
    
    # User specific aliases and functions
    
    . ~/.nvm/nvm.sh
    nvm use v0.12.2
    export NODE_PATH=${NVM_PATH}_modules
    

    ついでにバンドルでインストールされたnpmのバージョンも確認してみます。

    ...
  • GulpでCSS/JavaScriptコンパイル環境を構築する ─ Windows編

    いまさら感が強いんですが、世の流れ的に、フロントエンド開発ではSCSS(SASS、LESS等)、CoffeeScriptなどでCSSやJavaScriptのコーディングを効率化しつつ、同時にソースの保守管理をし易くするという開発手法がデフォルトになってきました。私はその辺の技術の取り込みがおっくうで、ついついCSSやJavaScriptを素でコーディングしてしまったりしていたのですが、最近やっている Ruby on Rails の開発でCoffeeScriptでJavaScript書いてみて、圧倒的なコード生産性の高さに、もはや今までのベタなフロントエンドコーディング手法は改めざるを得ないという境地に達しました(いやはや、ようやくですねぇ…)。 ──と云うことで、早速CSS/JavaScriptのコンパイルビルドを行う環境を業務マシンであるWindowsマシンに作ってみようかと思います(WEBサービス側のCentOS(Linux)環境への導入はこちらの記事を参照)。

    なお、なぜビルドツールをGruntではなくGulpにしたかというと、今どきのトレンドはGulpの方かなぁ…という漠然な理由だったりするんですが、まぁ、Gruntより設定ファイルが記述しやすく、複数リソースの設定があっても設定が煩雑化しないというメリットもあるからです。

    Node.js のインストール

    まずはGulpはnode.jsのモジュールなので、node.jsをインストールしないことには始まりません。そんな訳で、node.jsをインストールします。 インストールは簡単で、Node.jsの公式サイトからインストーラーをダウンロードするだけです。私の業務用マシンは「Windows7(64bit版)」だったので、node-v0.12.0-x64.msi というファイルが対象になります(2015年3月4日時点のNode.jsのバージョンは0.12.0です)。 インストーラがダウンロードできたら、早速起動させます。いくつか対話が発生しますが、特に注意しないといけないようなインストール設定はありません。 イントールが完了したら、コマンドプロンプト(もしくは、パワーシェル)から、Node.jsのバージョンを確認してみます。

    > node -v
    v0.12.0
    

    ついでにバンドルでインストールされているnpmのバージョンも確認してみます。

    > npm -v
    2.5.1
    

    これでNode.jsのインストールは完了です。

    Gulp のインストール

    次にGulpをグローバルにインストールします。

    > npm install -g gulp
    > glup -v
    [**:**:**] CLI version 3.8.11
    

    これでインストール完了です。もしインストールに失敗するようなら、

    > npm install -g gulp --mscs_version=2012
    

    ──とオプションを付けてみると上手くいくかもしれません。 次に、ローカルにインストールします。 ローカルにインストールするにあたっては、npmの初期化を行う必要があります。まず任意にgulpを実行したいディレクトリを作成します。この記事では、C:\npm\node_modules\gulp というディレクトリを新たに作成しています。

    > mkdir -p C:\npm\node_modules\gulp
    > cd C:\npm\node_modules\gulp
    > npm init
    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sane defaults
    
    See `npm help json` for definitive documentation on these fields
    and exactly what they do.
    
    Use `npm install --save` afterwards to install a package and
    save it as a dependency in the package.json file.
    
    Press ^C at any time to quit.
    name: (gulp) gulp_build
    version: (1.0.0)
    description: Gulp-build-test
    entry point: (index.js)
    test command:
    git repository:
    keywords: gulp
    author: maeno
    license: (ISC) MIT
    About to write to C:\npm\node_modules\gulp\package.json:
    
    {
    "name": "gulp_build",
    "version": "1.0.0",
    "description": "Gulp-build-test",
    "main": "index.js",
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [
    "gulp"
    ],
    "author": "maeno",
    "license": "MIT"
    }
    
    Is this ok? (yes) yes
    

    対話式にいくつか属性値を聞かれるので、任意に入力します(すべてEnterでも可です)。 初期化ができたら、早速ローカルにgulpをインストールします。

    ...
  • 運用的グラフを診る(DNS編)

    おはようございます。インフラ宮下です。

    ビックデータ時代様々なデータやグラフがあふれかえってます。 そんなグラフに関するお話です。

    はじめに

    インフラ運用で使う実際のグラフを使って、どのような事が起きていてどんな対処が必要になるのかを見ていきたいと思います。

    使うグラフ

    WS000150

    muninでbindのクエリ統計をとったグラフです。 OSはCentOS release 5.9になります。

    問題点

    グラフの色はクエリタイプ毎に分類されているのですが、AM8時前までで一番多いのはANYレコードです。 これは「DNS AMP攻撃」が行われた形跡です。

    ISPにおけるDoS/DDoS攻撃の検知・対策技術 DNS Amp攻撃の解説と、踏み台にされないためのBIND DNSの設定

    対応策

    今回は意図的に対策していないBindを利用している為、攻撃にさらされてしまいました。 DNS AMP攻撃がひどいのが、勝手にトラフィックを使って他人を攻撃してしまっているので本人に悪気が無くても加害者になってしまいます。 対策は既に出回っていますが、bindバージョンアップして再帰的問い合わせを実施しないか、クエリを受け付けるNWを制限するというのが一般的です。 あとはCentOS6系であればiptablesで特定ドメインのクエリを止める事が出来ます。 (出来るのはCentOS6以上)

    NSサーバへのANY? . な連続リクエスト対応 DNSアタックとiptablesフィルタ

    実際のANYリクエストで多いのは「isc.org」だと思います。どちらかと言うと長期間にわたってじんわりと来る感じ。 その他では「uspsoig.gov」や「defcon.org」「doleta.gov」が最近良く目にします。

    先程のiptablesでブロックする方法は、 DNS Amplification Attacks Observer など情報は出回っていますのでサービスに影響が出ない範囲で実施してみてください。

    注意しなければいけない点としては、qmailがメール送受信時の名前解決にANYレコードを引いてくるので何でもかんでもANYははじいてしまうとメール障害となってしまいます。 qmailとDNSSEC <a http://mediakisslab.net/doku.php?id=linux:qmail:memo" target="_blank">DNSSEC対応

    さいごに

    昔は自前でDNSサーバをたてて、そのまま放置して今も稼働しているなんて言うケースはどこでもあると思います。 (むしろ外部サービスとかで使われているDNSはきちんと担当の方がいて健全に運用している気がします) グレイな環境で手が出ないオープンリゾルバなDNSは怖いですな。 (昔はメールの不正中継の方が花形だったのに…)

    ...
  • chefのruby_blockを用いて環境変数を再読み込み

    こんにちは。小宮です。

    chefでいろいろ自動化していくうちに、途中で変更された値というか変数を使いたい場合が出てくるのかなと思います。 1回目は上手くいかないけど2回目は上手くいくというような冪等にならない怪現象を解決したいと思う時がそのうちきます。 そんなとき、、  ohaiで値がとれる場合はそれを使いなければohaiのプラグインを自作するか、  ruby_blockを書いたり、notifiesで:immediatelyとかつけて呼び出すって感じの対応が必要になったりします。。

    何言ってっかわかんねえ!と思うかたは以下のリンク先にchefの実行順序に関して書かれているので見てみるといい気がします。 Chefのレシピは上から下に実行されるという誤解 | Engine Yard Blog JP

    これだけだと不親切かもしれないので以下ご参考まで。

    template "/etc/profile.d/rbenv.sh" do
      not_if "grep rbenv /etc/profile.d/rbenv.sh"
      source "rbenv.sh.erb"
      action :create
      notifies :create, "ruby_block[initialize_rbenv]", :immediately
    end
    
    ruby_block "initialize_rbenv" do
      block do
        ENV['RBENV_ROOT'] = node[:rbenv][:root]
        ENV['PATH'] = "#{node[:rbenv][:root]}/bin:#{node[:rbenv][:root]}/shims:#{node[:ruby_build][:bin_path]}:#{ENV['PATH']}"
      end
    
      action :nothing
    end
    

    少し解説しますと、 chefではレシピ中での改変を前提とした処理はくふうがひつようで、 rubyで書かれた処理はconvergeの手前で行われてしまってその時点では途中の改変を認識できないようです。(だから2回目に成功する) ruby_blockリソースはconvergeのタイミングと同じ時に動くようです。 特定のリソースの処理が行われるときだけ実行したい場合にはそのリソースのnotifiesにはタイミングを指定できます。(:immediatelyとか:delayedとかあるらしい) この場合、ruby_blockリソースのactionにはnothingを指定しておき、templateリソースでprofileの設定を置いて:immediatelyをnotifiesに指定することで ただちに変数の再読み込みが実行される、という話になります。(レシピを分けてる場合にnotifiesつかうと-oで個別実行しにくくはなりそう。)

    ...
  • AWSのSecurityGroup関連の調査・更新CLIメモ

    こんにちは。小宮です。

    今回ご紹介するのはpiculetでgroupファイルでルール更新というのではありません。 ちょっと整理とか削除とかしたいけど手でポチぽちするには量が多いしオペミスが心配だし手間だし早く帰りたいので どれに紐づいてるのか一括で調べたい一括更新したいといった時にforループとCLIでなんとかする方法です。 SecurityGroupの上限緩和申請の際にSGの書き方的に通信パフォーマンスがアレで引っ掛かった時等にこんなような作業が必要に。

    あんまり使いこなせてるほうでもないのですが、一応載せておきます。ご利用は自己責任でお願いします。 みなさま似たようなことしててもっと洗練されたやり方をご存知の方も沢山いそうです。 弊社だと稲田さんほか協力部隊の方々がもっと詳しそうな気がします。マサカリ歓迎いたします。 稲田さんに聞いたらもっとoutputはtextにしてjoinを使いこなせと言っていたのでそのうち何か書いてくれると思います。

    SecurityGroupのidから紐づくインスタンス情報を得る

    これは既存の情報を得るだけで更新しないので気軽に実行できると思います。 まずリストを作る(消したいSGをいれる)

    vi listfile
    sg-xxxxxxxx,SG_hoge_dev1
    sg-yyyyyyyy,SG_fuga_dev2
    ...
    
    list=listfile
    profile=xxxx
    

    リストを読み込んでdescribe-instancesを実行

    for i in `cat $list|grep -v elb`
    do
    groupid=`echo $i |awk -F, '{print $1}'`
    groupname=`echo $i |awk -F, '{print $2}'`
    echo $i
    aws ec2 describe-instances --profile ${profile} --filters Name=instance.group-id,Values=$groupid --output text \
    --query 'Reservations[].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output json \
    |sed -e '/\]/d' -e '/\[/d' -e '/^$/d' -e 's/ //g'|perl -pe 's/,[ ]*\n/,/g'|sort -t , -k 3
    echo ""
    done
    

    出てきた結果からlistfileをつくりSGはずしたり替えたりするときにつかいます。

    ...
  • solarisのKSSLをつかう

    おはようございます。インフラ宮下です。

    最近はopensslの脆弱性が頻繁に取りざたされています。 そこで今回はKSSLを使ってSSLをterminateする設定を紹介します。

    1.環境

    サーバ:oracle spark enterprise T2000 OS:solaris10

    とても古い環境です。

    構成:コンテナ構成でWEBサーバはlocal ZONEに構築されています。    KSSLで終端するのはglobal ZONEです。    local ZONEのWEBサーバでは、8888ポートでListenするように設定しています。

    2.証明書の準備

    KSSLで渡せる証明書情報は1ファイルだけなので、「証明書+中間証明書+秘密鍵」の順番で情報を貼り付けたファイルをGlobal ZONEから見れる場所に設置する。

    [shell]# vi /etc/httpd/keys/abc.net.key [/shell]

    3.SMFにKSSLサービスを登録する

    [shell]ksslcfg create -f pem -i /etc/httpd/keys/abc.net.key -x 8888 zone-web01 443 [/shell]

    「zone-web01」はforward先のサーバを差します。(今回はlocal ZONEのWEBサーバ) この名前は、DNSで引けるかhostsに登録してある必要があります。 「-i」…設置した証明書を指定する。経験的にファイルの権限とかに制約はない 「-x」…配下のサーバと通信ポート番号。webサーバがListenしているポートです 「zone-web01」…terminate後の接続先サーバ名 「443」…KSSL自体が待ち受けるポート

    [shell]# svcs -a|grep ssl online 10:15:01 svc:/network/ssl/proxy:kssl-zone-web01-443 [/shell] Global Zoneでこのように「online」となれば起動成功です。

    ...
  • opsだけどgitを使ってみた~その2

    こんにちは。小宮です。 前回のつづきです。今回はgitマージとタグとコンフリクトの話を書きます。 まあ初心者が慣れてきた頃の様子ということで生温かく見守ってください。 git-flowやブランチモデルがどうという話はでてきません。

    git branch でブランチを切る

    現在居る場所を確認する

    $ git branch -a
      add_custom_repository
    * master
    

    addしただけのやつがないのを確認します。

    $ git status
    # On branch master
    # Changed but not updated:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       modified:   .gitignore
    #
    no changes added to commit (use "git add" and/or "git commit -a")   
    

    ※万が一addしただけのやつがある場合、commitするかstashするかする必要があります。

    ...
  • source treeを使ってgitlabを触ってみる(2)

    おはようございます。インフラ宮下です。

    前回source treeのインストールと鍵の登録までを説明しましたので、今回はgitlabとの接続について説明します。 社内にgitlabがあるのでgitlabとの接続が前提となります。 (もちろんgitlabのアカウントもある想定)

    gitlab

    gitlabの自分profile画面のメニューで「SSH keys」を選択します。

    既に登録されている鍵の一覧が確認できます。右上にある「Add SSH key」をっクリックします。

    WS000132

    鍵登録の画面に移ったら、Titleに識別し易い名前を(入力しないと自動生成されます)入れて、Keyの所に前回作成した公開鍵を貼り付けたら「Add key」で登録します。

    WS000133

    登録keyの一覧に表示されたら無事登録は完了です。

    再びsource treeに戻ります。

    ではgitlabのリポジトリをcloneします。「新規/クローンを作成する」で開始します。

    WS000135

    今回は、gitlabのリポジトリを使いますので、「リポジトリをクローン」タブを選択して、  ・元のパス/URLにgitlabの接続先情報を入れます。  (例:http://192.168.0.250/infra/projectX.git)   社内gitlabはhttpでの接続が出来ますが、gitであったりsshでも接続出来る方法なら何でも大丈夫です。   入力したら自動で接続確認が行われて接続成功・失敗が確認出来ます。  ・保存先のパスにクローンしたデータの保存先を指定します。  ・リポジトリをブックマークはそのまま選択状態にしておきます。  ・名前はsourcetree上で表示される名前なので、どのリポジトリかわかるような名前を付けておいてください。

    WS000136

    必要事項を入力したら「クローン」でスタートです。

    データ量によりますが、しばらく待つと保存先のパスにクローンが完了します。

    WS000137

    無事登録されました。これでsourcetreeからgitライフが可能となります。

    基本的な作業として、pushするまではこんな感じです。 PC側でファイルの修正をすると変更アイコンに変わりますので「追加」をクリックするかファイルの所をクリックします。

    WS000139

    ...
  • 初心者向けGoogle Analyticsの基本的な使い方[第一回]

    こんにちは。フロントエンド担当の鴫原(シギハラ)です。

    「Google Analytics導入したけど、どうやって解析したらいいかわからない!」という初心者の方向けに、全5回にわけてGoogle Analyticsの基本的な使い方についてお話をしたいと思います。今日は第1回目となります。

     

    <目次>

     

    Google Analyticsとは

    Googleが提供している無料のアクセス解析ツールのことです。 「1日に何人くらいの人がうちのサイトに来ているか」「始めにどのページを見たのか」「どんな検索ワードでサイトに来ているか」など自身のwebサイトの現状を知ることで、強み改善点を分析することができます。 何かしら目的のあるwebサイトには必ず導入したほうがいいツールです。

    Googleアナリティクス

     

    Google Analyticsの導入

    1. Google Analyticsの導入手順

    導入は以下の3STEPで簡単に登録することができます!

    1. Google Analyticsの公式サイト(http://www.google.com/intl/ja_ALL/analytics/index.html)にアクセスし、必要な情報を入力します。
    2. 登録後、コードが発行されるのでコピーをします。
    3. コピーしたコードをサイト内の全ページに貼り付けます。※設置場所はの直前(Google推奨)。
    flow

     

    2. Google Analyticsの導入時に一緒に設定すべき3つのこと!

    導入時に以下の3つも一緒に設定しておくと便利です。

    1. Googleウェブマスターツールと連携すること →通常Google Analyticsでは取得できないデータが取得できるようになります。
    2. 自分や関係者のアクセスを除外すること →関係者のアクセスを除外しないと真のデータが見れません!
    3. コードに「ga(‘require’, ‘displayfeatures’);」を追記すること →ユーザー属性(性別、年齢、興味)を取得できるようになります。

    ▼参考記事 ・必ず設定したい!Googleアナリティクスを導入したら最初に行うべき基本設定 http://creive.me/archives/5393/ ・最初に設定しないと絶対損する!Google Analytics 9個の必須設定&解説 http://www.find-job.net/startup/analytics-setting ・Google Analyticsでユーザーの分布レポートを有効化する手順 http://techmemo.biz/web-cheat-sheet/google-analytics-user-distribution/

     

    まとめ

    今回はGoogle Analyticsとは?からGoogle Analyticsの導入について説明をさせていただきました。 第2回からは基本的な使用方法や用語についてお話できればと思います。 最後までお付き合いいただきありがとうございました!

    ...
  • bashのhistoryをsyslog出力、jenkinsでビルド

    こんにちは。小宮です。 セキュリティ関連のお仕事で「実行コマンドを記録したい」という要望が最近多くなってきました。 何種類か方法はあると思いますが、今回はbash_historyに時刻を入れて一つのログにまとめてみたいと思います。

    これやったあと便利に感じたのはメンテナンスの時作業時刻を報告する場合にログをgrepで解決可能というところです。

    jenkinsでビルドするのは、最近はやりの継続的インテグレーションということでやってみました。 最初は心理的な障壁があったんですがやってみると結構楽で手順のもれがないので良いと思いました。 脆弱性の対応で何回かビルドすることになりましたがjenkinsジョブになってるのは便利でした。

    CentOS6.5です。 jenkinsさんのジョブは以下のとおりです。 単にパラメータつきのシェルの実行です。

    #!/bin/bash
    topdir="${HOME}/rpmbuild"
    rpmdir="${topdir}/RPMS/x86_64"
    
    if [ -f ${HOME}/.rpmmacros ];then
      echo "%_topdir ${topdir}" > "${HOME}/.rpmmacros"
      echo "%_signature gpg" >> "${HOME}/.rpmmacros"
      echo "%_gpg_name D279xxxx" >> "${HOME}/.rpmmacros"
    fi
    if [ -d ${HOME}/rpmbuild ];then
      mv ${HOME}/rpmbuild{,.`date +%Y%m%d.%H%M`}
      mkdir -p ${HOME}/rpmbuild/SRPM
    fi
    
    case "${TARGET}" in
     *.src.rpm) rpm -Uvh "${TARGET}"
      cp -p ${topdir}/SPECS/bash.spec{,.org}
      sed -i 's/make "CFLAGS=$CFLAGS -fwrapv" "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS `getconf LFS_CFLAGS`"/make "CFLAGS=$CFLAGS -fwrapv" "CPPFLAGS=-D_GNU_SOURCE -DRECYCLES_PIDS `getconf LFS_CFLAGS` -DSYSLOG_HISTORY"/g' ${topdir}/SPECS/bash.spec
      sed -i 's/Release: 29%{?dist}/Release: 29%{?dist}_isao_5/g' ${topdir}/SPECS/bash.spec
      sed -i '108s/^$/\n/g' ${topdir}/SPECS/bash.spec
      sed -i '109s/^$/Patch145: bash-syslog_facirity.patch\n/g' ${topdir}/SPECS/bash.spec
      sed -i '181s/^$/%patch145 -p1\n/g' ${topdir}/SPECS/bash.spec
      cd ${HOME}/rpmbuild/SOURCES/
      tar xzf bash-4.1.tar.gz
      cp -rp bash-4.1{,.org}
      sed -i 's/#  define SYSLOG_FACILITY LOG_USER/#  define SYSLOG_FACILITY LOG_LOCAL6/g' ${HOME}/rpmbuild/SOURCES/bash-4.1/config-top.h
      sed -i 's!(SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d %s", getpid(), current_user.uid, line)!(SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d PPID=%d SID=%d User=%s UID=%d CMD=%s", getpid(), getppid(), getsid(getpid()), current_user.user_name, current_user.uid, line)!g' ${HOME}/rpmbuild/SOURCES/bash-4.1/bashhist.c
      sed -i 's!(SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED): PID=%d UID=%d %s", getpid(), current_user.uid, trunc)!(SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED): PID=%d PPID=%d SID=%d User=%s UID=%d CMD=%s", getpid(), getppid(), getsid(getpid()), current_user.user_name, current_user.uid, trunc)!g' ${HOME}/rpmbuild/SOURCES/bash-4.1/bashhist.c
      diff -crN bash-4.1.org bash-4.1 > ${HOME}/rpmbuild/SOURCES/bash-syslog_facirity.patch
      rpmbuild -ba ${topdir}/SPECS/bash.spec
     ;;
     *)  echo 'environment variable TARGET must be set.'; exit 1;;
    esac
    

    TARGETにしたパラメータは以下です。 http://vault.centos.org/6.5/updates/Source/SPackages/bash-4.1.2-15.el6_5.2.src.rpm

    ...
  • AWSとVPN接続したら応答が無くなる時の対応

    おはようございます。インフラ宮下です。

    AWSのVPCとオフィスをVPNで接続するケースは良くありますが、構成によってはダウンロードしたconfigではうまく動作しない事があります。 今回は、以下の環境の時に変更しなければいけなかった設定をまとめたいと思います。

    1)AWSの接続環境

    [shell]リージョン:シンガポール ルータ:YAMAHA RTX 1200 経路情報:Static[/shell]

    2)VPNのconfigを確認

    VPN Connectionsを作成した後にconfigをダウンロードすると設定項目として、IKE・IPSec・Tunnel Interface・Static Route の4項目がありますのでそれぞれの内容について確認しましょう。

    ・IKE

    [shell] tunnel select 1 ipsec ike encryption 1 aes-cbc ipsec ike group 1 modp1024 ipsec ike hash 1 sha ipsec ike pre-shared-key 1 text y7Nn93e7fJHWQrUaabbccdd112233[/shell]

    IKEについては、configそのまま流用で問題ないでしょう。keyは個々に違いますので正しいKeyにしてください。 トンネル番号は、既に「1」を使っている場合は違う数字にしてください。(以降のID表記も忘れずに変える)

    ・IPSec

    [shell] ipsec tunnel 201 ipsec sa policy 201 1 esp aes-cbc sha-hmac ipsec ike duration ipsec-sa 1 3600 ipsec ike pfs 1 on ipsec tunnel outer df-bit clear ipsec ike keepalive use 1 on dpd 10 3[/shell]

    ...
  • opsだけどgitを使ってみた~その1

    こんにちは。小宮です。 opsだけどgitを使ってみた~その1ということで、githubもgitlabもgitも初心者なので忘れないようにメモ。 今回はたどたどしくpushするところくらいまでにします。branch切ってみるとこは初回から書くとおなかいっぱいになりそうなので。 たぶんその2までです。その2はbranchとtagとconfrictのことを書いています。

    背景とメリットデメリット

    ・背景  昨今の継続的インテグレーションだとかでchefでサーバ構築の需要があってその流れ弾に当たった機会を得たため、  そのリポジトリをバージョン管理する必要が生じましてgitをつかうことに。最初は会社のエンタープライズ版のgithubに保存してもらっていたんですが、  VPN経由でのやり取りの需要からgitlabの導入を行うことになりました。 ・gitのメリット  ヒストリ追わなくていい。見える化。ファイル内の差分が見やすいので確認がブラウザで容易に可能になる ・gitのデメリット  同僚がつかいはじめてくれない(必要にせまられないと忙しくてスルー傾向)  まあなんか気持ちはわかります。私もきっかけは半ば強制的な感じでした。

    githubとgitlabの違い  gitコマンド的にはあんま変わんない気もしますが、制度がオープン(エンタープライズはクローズ可)かクローズでいけるか、  gilabの場合は容量制限もディスク容量とかの環境次第でユーザ権限を細かく設定できたりなどするのがいい感じです。  もっというとVPN越しにしかつながらないようにしたいとかの自由がききます。共有Webサービスつかうか自前構築のつかうかの差です。  gilab導入の手間は最近はchefで気軽に入るレシピもあり軽減されてきたようです。

    githubの場合、二段階認証をなんとかする

     詳細な説明は省きますが、まずgithubに登録して会社のgithubの二段階認証をなんとかします  →会社で用意していただいたマニュアルのとおりに実施。   要はgmailの2段階認証みたいなことで携帯にSMS通知が届いて認証する仕組みのセットアップです。

     接続するホストでsshの鍵の作成と、作成した公開鍵の登録をgithub側のユーザプロファイルで行います。

    pushするホストでgitを初期設定する

    まずgitコマンド打つ人のユーザ情報を登録です。

    git config --global user.email "komiyay@xxxxx"`
    git config --global user.name "Yxxx Komiya"
    

    設定ファイルにメモリ制限やスレッド数を指定しないとOutOfMemoryエラーが出ます。

    $ vi ~/.gitconfig
    [user]
            email = komiyay@xxxxx
            name = Yxxx Komiya
    [core]
            packedGitWindowSize = 128m
            packedGitLimit = 128m
    [pack]
            windowMemory = 128m
            threads = 2
            deltaCacheSize = 128m
            packSizeLimit = 128m
    

    ※m1.smallくらいでこの設定にしました。t1.microだとメモリエラー出ました。

    ...
  • 超絶簡単で便利なVagrantを使ってみよう!

    こんにちは。デベロッパーの平形です。

    はじめに

    この記事ではVagrantの使い方を解説します。 なお、この記事は連載の続きになりますので、まだご覧になっていない方は、以下の記事を初めに読む事をおすすめします。 DevOps時代のアジャイルでスケーラブルな開発環境をVagrant,GitHub,Travis,Chef,OpsWorksで構築する

    Vagrantとは?

    Vagrant(ベイグラント)は、FLOSSの仮想開発環境構築ソフトウェア[1]。VirtualBoxをはじめとする仮想化ソフトウェアやChef(英語版)やSalt(英語版)、Puppetといった構成管理ソフトウェアのラッパーとみなすこともできる。 Vagrantを用いると、構成情報を記述した設定ファイルを元に、仮想環境の構築から設定までを自動的に行うことができる[2]。当初はVirtualBoxをターゲットとしていたが、1.1以降のバージョンではVMwareなどの他の仮想化ソフトウェアやAmazon EC2のようなサーバー環境も対象とできるようになった[3]。Vagrant自身はRubyで作成されているが、PHPやPython、Java、C#、JavaScriptといった、他のプログラミング言語の開発においても用いることができる[4][5]。 引用元:wiki

    なぜVagrantなの?

    まず現状の課題からお話します。 こんな事ってありませんか?

    • 開発者のPCのOSがバラバラで環境構築の手順書作るのめんどくさい。
    • てかWindowsの事なんか考えたくもないよ。
    • ハンズオンの時にみんなの環境が違うから、みんな挙動が違って嫌になる。

    Vagrantを使うとこんな事ができます。

    • コードによる仮想マシンのOS指定、ネットワーク設定、利用するシステムリソースの指定。
    • Chefなどの構成管理ツールを利用して環境構築する事ができる。

    以下のメリットがあります。

    • 複数の開発者に共通の開発環境を配布できる。
    • 仮想マシンの設定が1つのファイルで管理する事ができるので、認識しやすい。
    • WindowsでもMacでもLinuxでも共通の開発環境を提供できる。

    vagrant使うのって面倒だと思いますか? めちゃくちゃ簡単です! まだ使ったことない人は、とりあえずインストールしてください!

    インストール

    VirtualBox

    VagrantではVirtualBoxなどの仮想化ソフトウェアを使って仮想マシンを立ち上げる事になります。 今回はVirtualBoxを利用します。

    ここからダウンロードしてインストール。

    Vagrant

    ここからダウンロードしてインストール。

    クイックスタート

    OSはubuntu 12.04(32bit)にします。

    まず作業場所のディレクトリを作ります。

    $ mkdir vagrant_test
    $ cd vagrant_test
    

    次にVagrant用の設定ファイルを作成します。

    $ vim Vagrantfile
    

    以下をVagrantfileに貼り付けてください。

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    Vagrant.configure("2") do |config|
      config.vm.box = "hashicorp/precise32"
    end
    

    仮想マシンを起動します。

    ...
  • remotediff

    各環境間での /etc/hosts をdiffする場合のmemo

    Cloud上でサーバを大量に作成したあと、confの比較チェックするときなどに。

     

    ・ローカル同士(/etc/hosts.backupと比較)

    $ diff /etc/hosts /etc/hosts.backup
    

     

    ・ローカル<->リモート(xxx-web01)

    $ diff /etc/hosts <(ssh xxx-web01 cat /etc/hosts)
    

     

    ・リモート(xxx-web01) <-> リモート(xxx-web02)

    $ diff <(ssh xxx-web01 cat /etc/hosts) <(ssh xxx-web02 cat /etc/hosts)
    

     

    ・ローカル<->リモートで復数サーバ(xxx-web01~10)

    $ for SRV in xxx-web0{1..9} xxx-web10
    > do
    > echo ${SRV}
    > diff /etc/hosts <(ssh ${SRV} cat /etc/hosts)
    > done
    

     

    ...