Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Apacheホスティング環境(Webサーバー+PHP実行環境)をコマンド一発で構築する一撃シェルスクリプト

ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場 第1回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/02/26 14:00

 最近では、ChefやPuppet、Ansibleといったサーバーの構築を支援するツールが人気を集めています。たいへん便利で強力なのですが、必ず使えるわけではありません。一方、BashやBourne Shell互換シェル向けに書かれたシェルスクリプトであれば、どのUNIX/Linux環境においてもほぼ使用できます。本連載では、シェルスクリプトでサーバー構築を一発で終わらせる「一撃シェルスクリプト」をサンプルとともに紹介していきます。今回は、ApacheサーバーとPHPをバーチャルホスト上に立ち上げる一撃シェルスクリプトです。

目次

はじめに

 CodeZineをご覧の皆様、はじめまして。USP友の会副会長の濱田と申します。サーバーエンジニアを生業としており、USP友の会で日々シェルスクリプトやシェル芸の腕を磨きながら、コマンドラインによるオペレーションの自動化などを研究しております。最近USP友の会の勉強会で「一撃サーバー構築シェルスクリプト勉強会」を始めましたので、機会を見つけてはご参加いただければ幸いです。

USP友の会とは

 USP(ユニバーサル・シェル・プログラミング)友の会は、日本唯一の、シェルプログラミングファンのコミュニティです。2009年5月にスタートした本会は、シェルプログラミングに限らず、簡潔明瞭さ、創意工夫を尊ぶエンジニアが集まり、技術の話題に花を咲かせています(公式サイトより)。

 会の活動として、上田隆一会長によるシェル芸勉強会をはじめとした各種勉強会や定例会を開催しております。オンラインでは、メーリングリストやTwitterFacebookページによる情報発信のほか、Facebookグループによる技術討論など活発に行っていますので、ぜひご参加ください。

一撃シェルスクリプトとは

 これは私が作った造語で、厳密な定義というものを設けているわけではありませんが、「シェルスクリプト(と設定ファイルのひな形)を用意すれば、コマンドを1回実行するだけで環境構築ができてしまうというスグレモノ」を目指しています。現在のところ、線引きとして以下のように詳細なルールを作っています。

  • OSインストール直後に一撃シェルスクリプトを配置して動かすものとする
  • 実行回数は1回のみで、人が張り付く必要のない設計とする
  • 対話式の入力は可能な限り回避する

一撃シェルスクリプトで重視していないこと

 一撃シェルスクリプトは、あくまで「シェルで頑張れる範囲で冪等性(べきとうせい)を確保する」ツールです。なので、上に記した「一撃シェルスクリプトの定義」にだいたい合致していれば「これは一撃シェルスクリプトだぞ」と名乗ってもよいと思っています。例えば、何がなんでも1枚のスクリプトファイルのみで完結することを目的とせず、(インターネットに繋がっていることが前提ですが)設定ファイルが複数または多岐にわたる場合は、GitHubなどから雛形ファイルをダウンロードし、各々のホストで整形加工することもよしとしています。

 これはベテラン勢によくありがちなのですが、いわゆる○○準拠というものに対しては、あまり重視するつもりはありません。最終的に望むものが出来上がるのであれば、人様に迷惑をかけない限り何をやってもよいと考えます。

 なお、Linux(筆者の環境ではCentOSが多いですが)のデフォルトのシェルがBashまたはBourne Shell互換シェルであることから、ログインするシェルはともかく、一撃シェルスクリプトの実行環境はBashとしています。が、同一条件でインストールされたOSで冪等性が確保できるのであれば、どんな言語やシェルを使っても構いません。

構成管理ツールとして一撃シェルスクリプトを選ぶ理由

 ここ数年、ChefやPuppet、Ansibleなどを用いた、インフラの構成をコードで管理する「Infrastructure as Code」が流行っています。一度に大量のサーバーを等しい品質で構築したりするのに便利ではありますが、反面、1台〜数10台の規模で構築する場合において、いわゆる「管理のための環境構築」に工数を割くことが困難な状況もあるかと思います。また、会社や顧客によってはこうしたツールを導入することに消極的な場合もあるでしょう。

 シェルスクリプトで一撃インストールを行うためには、(テキストのコピペができるという意味で)sshクライアントさえあればよく、エージェントレスであるばかりか、構成管理サーバーのようなものを構築する必要がまったくないのがメリットです。サーバーにあるコマンド群のみを利用することで、導入障壁を下げる効果もあります。

 あえて用意する物があるとすれば、サーバー(インストール対象)側と同じ文字コード・改行コードが使えるテキストエディタと、sshクライアントでしょう。これらだけあれば、一撃シェルスクリプトのコーディングを始められます。

シェルスクリプトのコーディングに改行コードが重要な理由

 シェルスクリプトをコーディングする環境(エディタ)の文字コード、特に改行コードはサーバー側と合わせておいてください。どんなに記述内容が正しくても、サーバーの文字コード(改行コード)と一致していないと正しく動かないことがあります。一般的に、UNIX系OS(LinuxやMac OS Xなどを含む)の改行コードはLF、Windowsの改行コードはCRLFです。

【訂正とお詫び】コラム「シェルスクリプトのコーディングに改行コードが重要な理由」で、Mac OS Xで使用される改行コードについて「(ただしMac OS Xの改行コードはCR)」と記載しておりましたが、正しくはUNIXと同じくLFが使用されます。この誤りは編集部側の修正ミスによるものです。訂正するとともに、読者ならびに著者の濱田氏に深くお詫びいたします。

 ちょっと変わった実行方法としては、作成した一撃シェルスクリプトをWebサーバーにアップロードしておき、OSインストール直後のサーバーにsshログインしてから

curl http://……/一撃シェルスクリプト | sh

 あるいは

ssh -t root@(OSインストール直後のサーバー) "curl http://……/一撃シェルスクリプト | sh"

 のように実行するのも面白いでしょう。

シェルスクリプトを選ぶもう1つの理由

 サーバー構築をシェルスクリプトでやる理由のもう1つ大きな理由としては、今までシェルスクリプトに親しんできたサーバーエンジニアにとって、他の言語を覚えるよりも学習コストが低いという点が挙げられます。普段使いのUNIXコマンド(sedawkgrepheadtailcutなど)で標準出力に吐き出される文字列を加工するのがお手の物であれば、もうあなたは一撃スナイパーとして、“シモ・ヘイヘ”レベルのスキルの持ち主でしょう。

 また、あまりUNIXコマンドに親しみがなくても、一撃シェルスクリプトのコーディングを通じてUNIXコマンドを覚えたり、シェルスクリプトの作法を覚えることで、サーバーの構築だけでなくその後の運用にも役に立つスキルが身につくはずです。

シモ・ヘイヘとは

 シモ・ヘイヘ(Simo Häyhä['simɔ 'hæy̯hæ], 1905年12月17日~2002年4月1日)はフィンランドの軍人。フィンランドとソビエト連邦の間で起こった冬戦争では、ソビエト赤軍から“白い死神”と呼ばれ恐れられた。スナイパーとして史上最多の確認戦果(505名射殺)の記録を残している。愛称は「シムナ」。フィンランド現地語の発音にあわせる場合、シモ・ハユハ、もしくはシモ・ハウハと表記するのが近い(Wikipediaより引用)。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 濱田 康貴(ハマダ ヤスタカ)

    サーバーエンジニアとして主にLinuxのWEBサーバーを設計、構築、運用を行っています。運用ツールの相棒としてシェルスクリプトやワンライナーは心強いパートナーと信じて疑わず、ブログでTIPSを公開しています。2009年5月のUSP友の会活動開始より参画し、現副会長。最近では、USP友の会で「一撃サー...

バックナンバー

連載:ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5