月次アーカイブ: 6月 2014

みなさんこんにちは。本日いよいよ四十路にリーチがかかってしまいました。沢山のおめでとうメッセージありがとうございます!今後もシェル芸道に励んでいきたいと思います。いきなり宣伝です。

[amazonjs asin="4048660683" locale="JP" title="フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門"]

実は私、この本の中にあるエピソードで登場しております。どこらへんに登場しているかはアスキー・メディアワークスさんのサイトで目次を見ながらニヤニヤしてください。Bash CMSですが、1日で作ったエピソードはこちらになります。

こちらのスライドは去年春のOSCのコミュニティ企画「OSC.cms」で、ものすごくアウェーな試合をしたときのものです。

さて、そんな裏話もありつつ出来上がったシェルスクリプト高速開発本、表紙の帯に「シェル芸を極めよ!」というチャレンジングなコピーが踊りますが、シェル芸創始者 上田さんが本日含蓄のあるつぶやきをされました。

まさにコレですよ!高校時代、HEAVY METAL SYNDICATEから流れたYngwie Malmsteenの「How Many Miles To Babylon」に衝撃を受けたnullpopopo少年は、それから毎日ハーモニックマイナー・スケールをピロピロと練習しまくったものです。下手くそでしたが。

https://www.youtube.com/watch?v=E1dekgHSMbI

そしてインギーといえば数々の名言もとい迷言。王者の迷言はだいたいこんな感じのが有名ですね。

『俺は貴族なんだ。正確には伯爵だ。』
『俺はルックスは悪くないし、金持ちだし、有名だ。スウェーデンの人間は俺をそういう表面的な部分でしか評価してくれない』
『スウェーデンでは俺は嫌われているんだ。理由は、俺が成功していて金持ちだからさ。』
『スウェーデンでフェラーリに乗っていると「税金を誤魔化したのか!?」とからかわれる。(税金が高いため)』

実に尊大ですね。さらに、アルバム「ODYSSEY」発売当時はジョー・リン・ターナー(ex Rainbow)をソウル・メイトと呼びあうほどでした。

『ジョー・リン・ターナーは唯一の相棒だ』
『ジョー(リン・ターナー)は本当にパワフルで、かつソウルフルだよ』

しかし、ツアーを回っていくうちに仲が険悪となり・・・

『オデッセイの曲は全部俺が書いたもので、ジョーの手などどこにも加わっていない。』
『ジョー(リン・ターナー)がソウルメイトだって? あんなヤツがソウルメイトだなんて聞いてあきれるよ。』

見事な掌返しっぷりですねw こういうところも王者の王者たる所以です。

 

閑話休題。こんな王者ですが僕のなかではギター・ヒーロー。数々の迷言から学ぶことだってあるはずと思い、シェル芸にあてはめてみました。しかし、インギー名言集からパロるとなると、あまりにネガティブなのばっかりで非常に困りましたが、頑張ってシェル芸に応用してみました。

これらは割と自分でもお気に入りです。こんなことして今日の午前中を過ごしていたら1日のエネルギーを使い果たしてしまいました。これではいけません。1日1行はコードを書かないと。ギターの練習と一緒なのですから、シェル芸道をサボるわけにいきません。今日の私をワンライナーで表現してみました。

while :; do :; done

 

お後がよろしいようで。

[amazonjs asin="B0000071UJ" locale="JP" title="Fire & Ice"]

以前、LXCでコンテナ作って遊んでいたりしたのですが、最近ではdockerが流行りのようですね。LXCとの違いなどについてはいずれ勉強会で話したいなーとは思いますが、まずは手元のマシンにdockerをインストールしてCentOSを起動してみるのと、ちょっとしたシェル芸を使ってコンテナをメンテするところまでをやってみましょう。 USP MAGAZINE vol.14

■ dockerのインストール

私は手元のノートPC(fedora 20)へインストールしました。fedora20の場合は、特にリポジトリの設定は不要です。CentOSの場合は、epelリポジトリからインストールします。ここで1点注意が必要なのですが、fedoraもCentOSもパッケージ名は「docker-io」です。パッケージ名が「docker」というのもありますが、これはGnomeやKDEのパネル引き出しなので気をつけましょう。

[fedora]dockerインストール

[ (っ´∀`)っ@友の会 ~]$ sudo yum install docker-io

[CentOS]dockerインストール

[ (っ´∀`)っ@友の会 ~]$ sudo yum --enablerepo=epel install docker-io

以降は、fedora20上で実行することを前提に解説します。

■ CentOSのコンテナ作成

まずはdockerを起動します。

[hamada@u24e ~]$ sudo systemctl start docker

CentOSのコンテナイメージは、dockerのリポジトリより取得します。本稿執筆時点では、CentOS 6.5のイメージがダウンロードされます。と言っても、コンテナ作成前にわざわざブラウザやCLIから事前にダウンロードしておく必要はありません。

コンテナがどれだけあるかは「docker ps」コマンドで確認します。実行中でないコンテナも含めて表示するには「docker ps -a」と実行します。

[hamada@u24e ~]$ sudo docker ps -a
CONTAINER ID    IMAGE           COMMAND         CREATED         STATUS          PORTS           NAMES

まだコンテナを作成していないので、1つもコンテナが表示されません。次に、コンテナのイメージ一覧を見るには、「docker images」コマンドで確認します。

[hamada@u24e ~]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

こちらもまだコンテナを作成していないので、イメージファイルがありません。それでは早速コンテナを作成してみましょう。以下のコマンドで最初にコンテナを作成するときに、dockerのリポジトリからイメージファイルのダウンロードが始まります。

[hamada@u24e ~]$ sudo docker run -i -t centos /bin/bash
Unable to find image 'centos' locally
Pulling repository centos
0c752394b855: Download complete 
511136ea3c5a: Download complete 
34e94e67e63a: Download complete

コンテナのダウンロード〜作成の処理が終わると、プロンプトが「bash-4.1#」となります。実際に何度かログインして見てみたのですが、本当に最小限のパッケージしかなく、tarコマンドすらもなかったので、最初にこれだけのパッケージをインストールしました。

bash-4.1# yum install bind-utils bzip2 file sudo tar time traceroute unzip vim-common vim-minimal which wget telnet iputils iproute yum-utils

他のコマンドは、サーバやネットワークの調査に使うコマンドやvimの設定などの好みがあるのでインストールしていますが、 yum-utils パッケージだけは、後で使いますので必ずインストールしておいてください。

 

■ コンテナの内容をコミットする

dockerコンテナのシェルからexitすると、これまでの内容が消えてしまいます。なので、現時点でのコンテナの内容を保存したいときはコンテナの内容をコミットしましょう。再度ログインしたときにコミットされていることを確認するため、試しにdateコマンドの出力結果をテキストに残しておきます。

bash-4.1# pwd
/

bash-4.1# cd /root

bash-4.1# ls -la
total 28
dr-xr-x---  2 root root 4096 Jun  9 16:14 .
dr-xr-xr-x 21 root root 4096 Jun 16 00:26 ..
-rw-r--r--  1 root root   18 May 20  2009 .bash_logout
-rw-r--r--  1 root root  176 May 20  2009 .bash_profile
-rw-r--r--  1 root root  176 Sep 23  2004 .bashrc
-rw-r--r--  1 root root  100 Sep 23  2004 .cshrc
-rw-r--r--  1 root root  129 Dec  3  2004 .tcshrc

bash-4.1# date > date.txt ; cat date.txt
Mon Jun 16 00:30:34 BST 2014

ここまでできたら一旦「Ctrl+P」→「Ctrl+Q」で抜けて、ホスト側のシェルに戻り、CONTAILNER IDを確認するため「docker ps -a」を実行します。

[hamada@u24e ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
fda32aa9fa7d        centos:latest       /bin/bash           5 minutes ago       Up 5 minutes                            goofy_fermi

それでは先ほどまでログインしていたコンテナに名前をつけてコミットしてみましょう。ここでは仮に「nullpopopo/test<日付><通し番号>」とします。

[hamada@u24e ~]$ sudo docker commit fda32aa9fa7d nullpopopo/test$(date +%Y%m%d)00
db0e843b3ca780e268dd2b39835456891b29d2291392524d146f33c63eae2e33

「docker commit」の直後の引数は、「docker ps -a」で確認した「CONTAINER ID」です。 それではもう1度イメージを見てみましょう。

[hamada@u24e ~]$ sudo docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nullpopopo/test2014061600   latest              db0e843b3ca7        5 minutes ago       211 MB
centos                      latest              0c752394b855        6 days ago          124.1 MB

今までの「centos」リポジトリから「nullpopopo/test2014061600」という別のリポジトリになりました。これまでコンテナに施した変更は、「nullpopopo/test2014061600」に引き継がれます。最初にダウンロードしてきたイメージ「centos」が不要な場合は、ここで削除しても構いません。

[hamada@u24e ~]$ sudo docker rmi 0c752394b855
Untagged: centos:latest

イメージを削除するには、「docker rmi」コマンドの後にIMAGE IDを引数に渡してあげます。それではもう一度イメージの一覧を見てみましょう。

[hamada@u24e ~]$ sudo docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nullpopopo/test2014061600   latest              db0e843b3ca7        5 minutes ago       211 MB

「centos」のイメージが削除されました。そして今度は、コミットされたかどうかを、コンテナログイン後に日付テキストを開いて確認します。

[hamada@u24e ~]$ sudo docker run -i -t nullpopopo/test2014061600 /bin/bash

bash-4.1# cat /root/date.txt 
Mon Jun 16 00:30:34 BST 2014

ちゃんとコミットされているようですね。次のページからは、一般ユーザの作成とコンテナおよびイメージのメンテナンスを行います。

[amazonjs asin="B00JWM4W2E" locale="JP" title="Docker入門 Immutable Infrastructureを実現する"]

上田さん後藤さん、「フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門」発売決定おめでとうございます!私は勝手にこれを記念しまして、シェルスクリプト一撃インストールシリーズ第2弾、今回もさくらのクラウドで、「ログイン後に一発シェルスクリプトを叩くだけでRedMineを動かす」をやってみました。

一撃インストールシリーズとは

chefもpuppetもDockerfileも使わず、シェルスクリプトと設定ファイルのひな形を用意すれば、コマンドを1回実行するだけで環境構築ができてしまうというスグレモノ。学校で、職場で家庭で商店で、是非お試しいただければと思います。

第1弾のWordPressはこちらをご確認くださいね。前提条件となる環境構築はこちらで取り上げたスタートアップスクリプトを実行済みであることとします。また、RedMineのインストールバージョンなどはこちらに合わせてあります。

■ 仕様

  • WEBサーバはNginx+Unicorn。RedMineはデーモンとして動かす
  • NginxはCentALTリポジトリからインストールする
  • Rubyは ftp://ftp.ruby-lang.org/pub/ruby/ からRedmine推奨バージョンをダウンロードし、rpmbuildでrpm化する
  • ドキュメントルートは /home/vhosts/IPアドレス/public_html (今回はドキュメントルートへのコンテンツ配置を省略します)
  • アクセスログは /home/logs/IPアドレス/ 以下に保存
  • Nginx全体のアクセス制御(IPアドレスによる制限) は /etc/nginx/denyhosts で行う
  • /etc/logrotate.d/nginx のローテーション対象ログに、バーチャルホストのアクセスログを含め、366世代保管にする
  • MySQLのrootパスワード、RedMine用ユーザのパスワードはインストール時に生成する
  • RedMine用のDB名、ユーザ名は変数で指定する
  • キックするシェルスクリプトの他には、/etc/nginx/conf.d/default.conf の元ファイル、/etc/nginx/denyhostsの元ファイル、rubyのrpm作成用specファイル、rubyダウンロードスクリプト、RedMineのスタートスクリプトを準備し、シェルスクリプトと同じディレクトリにアップロードする

さくらのクラウドには、RedMine用のインスタンスもありますが、Apacheとの連携だったので、どうせだったらNginxと連携させてみたいなー、というのがやってみたキッカケになります。なお、RedMineのデフォルトユーザ「admin/admin」でログインするところまでしか確認してませんので、インストール後はすぐにパスワードを変更しましょう。また、MySQLも mysql_secure_installation コマンドで最低限のセキュリティ設定を行いましょう!

 

■ デプロイ対象一覧

今回は6つのファイルをホームディレクトリへアップロードしますので、それぞれのファイルについて、役割を表にして整理したいと思います。

INSTALLER  インスタンス起動〜yumアップデートからの再起動後にsshログインして実行するスクリプト
ruby.spec.orig ~/rpm/SPECS/ディレクトリ配下に置くspecファイルの元ファイル
rubycheck rubyの公式FTPサイトにあるアーカイブ一覧を取得するために使用するスクリプト
900_denyhosts Nginxのアクセス制御ファイル
901_nginx.conf Nginx設定ファイルのひな形
910_redmine-init RedMineのスタートスクリプト

次のページに続きます。 Redmine超入門 (日経BPムック)

先日2014/05/31(土) 、高円寺コワーキングスペース こけむさズにて開催されたインフラ寺子屋Offline meet-up 「お寺のお茶会」に参加してきました。シェル芸勉強会以外の勉強会に参加するのは久しぶりですねー。

当日は軽いデモ(WordPress一撃インストール)をやるつもりだったのですが、CentALTリポジトリが調子悪かったのと私本人の調子もあまりよろしくなかったので15時くらいからの参加でしたが、7名ほど集まりまして和気あいあいと盛り上がりました。

インフラ寺子屋の趣旨説明

参加者の皆さんのうち、サーバ/ネットワーク技術者になりたての方や、アプリ開発者の方で「サーバエンジニアがどんな仕事してるのか話を聞いてみたい」という方もいらっしゃったので、いろんな視点からサーバ/インフラの話ができたのではないかと思います。

また、最近流行りのフルスタックエンジニアについても話題にのぼりましたが、もうこの一言に集約されるでしょう。

そもそもエンタープライズな開発現場では(良くも悪くも)分業が進んでいるので、多能工的なエンジニアが強く求められることは少ないと思っていますが、スタートアップベンチャー()で「フルスタックエンジニア募集」ってそりゃ「当たるかどうかもわからん会社やサービスに何人も人雇うのってリスキーだからL1からL7まで(時にはそれ以上のレイヤも)全部1人でやってくれないと困りますわな」という本音をミリ単位のブ厚いオブラートにくるんで言ってるだけなので、早くこのバズワードが死語になってくれることを心の底から願っています。

それはともかくとして、サーバ/ネットワークエンジニアとして基礎からしっかりマンツーマンに近いスタイルで勉強しようぜというインフラ寺子屋の試みは非常に面白いと思います。数年前より勉強会ブームで、人気講師が登壇したり、流行りのツールやプロダクトが取り上げられたりするので、エクストリーム参加登録を強いられるわけでして。別にこうした勉強会へのアンチテーゼというわけではないのですが、いわゆる大手予備校に対する家庭教師的な位置づけの勉強会があってもよいのではないでしょうか。

今週末土曜日、インフラ寺子屋では「第1回Cisco/Catalyst実機ブートキャンプセミナー」が開催されます。なかなか個人で勉強するには敷居の高いスイッチやルータの設定をこの機会にハンズオンで学ぶことができますよ。勿論、作成したconfigは持ち帰ることができます。

開催概要

2014.06.07(土) 14:00〜18:00

※PCのセットアップがある為、13:30頃までのご来場をお勧めします。

定時開始が出来るよう、ご協力を御願いします。

主催:インフラ寺子屋(株式会社クロスキューブ)

会場:Hanare ひばりヶ丘西武池袋線 ひばりヶ丘駅 北口徒歩7分)

Hanare ひばりヶ丘 | あなたの街のコワーキングスペース

住所:埼玉県新座市栗原5-7-2 (交通アクセス

連絡先:090-2000-9821 / クロスキューブ 津村

参加費:10,000円 / 1名

(会場費・お茶代・税込み・クレジットカード決済可・領収書有り)

必要なもの:筆記用具・ノートPC

(有線LANポート・USBポート空き必須、WindowsVista以降もしくはMacOSX SnowLeopard以降)

※USB-シリアル変換ケーブルのドライバをインストールさせて頂きます。

※アンチウィルス製品及びOSのファイヤウォールは、セミナー中停止して頂きます。

定員:4名

(先着順・申込状況は随時、当エントリ・@infraterakoyaにてお知らせします。)

お申し込み方法はこちらをご確認くださいね。現場からは以上です。

※追伸

懇親会は高円寺の塚田農場だったのですが、名刺に (っ´∀`)っ ゃー を描いていただきました(*´ω`*)

(宮)塚田農場 主任 nullpopopo

 

しかも帰りがけにはクラウディアさんとコラボさせていただいちゃいました。恐らく津村さんの携帯に貼ってあったクラウディアさんのステッカーを見て店員さんが描いたのでしょう。聞いたところ、特にITに詳しいというわけではないそうで、瞬時にこういう絵を描けるのがすごく羨ましいです。

 

[amazonjs asin="4822298337" locale="JP" title="クラウドデザインパターン Azureを例としたクラウドアプリケーション設計の手引き"]