Your SlideShare is downloading. ×
ICHIGEKI-MT 2015/03/14
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

ICHIGEKI-MT 2015/03/14

324
views

Published on

2015/03/14 第5回 一撃サーバー構築シェルスクリプト勉強会の発表資料 …

2015/03/14 第5回 一撃サーバー構築シェルスクリプト勉強会の発表資料
https://usptomo.doorkeeper.jp/events/21044

Published in: Internet

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
324
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 第5 サーバー シェルスクリプト回 一撃 構築 勉強会 USP友の会 @nullpopopo 2015/03/14
  • 2. [自己紹介] 名前: 濱田康貴 ( @nullpopopo ) Blog http://nullpopopo.blogcube.info/ Facebook https://www.facebook.com/nullpopopo 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 3. [自己紹介] 執筆: シェルスクリプトマガジン (旧USP Magazine) 教えて先輩♡サーバー運用お助けTIPS 隔月(偶数月号)連載中 Vol.22 では石狩DCまで 取材に行ってきました→ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 4. [自己紹介] 執筆: CodeZine ( http://codezine.jp/ ) で ツールがなくてもサーバー構築でたじろがない! 一撃シェルスクリプト道場 連載はじめました。 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 5. [USP友の会とは] USP ユニバーサル シェル プログラミング の は、( ・ ・ )友 会 日 の、シェルプログラミングファンのコミュニティ本唯一 で す。2009年5月にスタートした本会は、シェルプログラミングに限 らず、簡潔明瞭さ、創意工夫を尊ぶエンジニアが集まり、技術の 話題に花を咲かせています。 公式サイト https://www.usptomo.com/ Twitter https://twitter.com/usptomo FB https://www.facebook.com/usptomo FB (グループ) https://www.facebook.com/groups/141271259271220/ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 6. シェルスクリプトとは一撃 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 7. シェルスクリプト「 と ファイルのひな( 設定 形)を用 すれば、コマンドを意 1 するだけで回実行 環境 ができてしまうというスグレモノ構築 」を目指し ています。(「一撃シェルスクリプト」は @nullpopopo の造語です) 現在のところ、線引きとして以下のように詳細なルールを作っています。 ● OSインストール直後に一撃シェルスクリプトを配置して動かす ものとする ● 実行回数は1回のみで、人が張り付く必要のない設計とする ● 対話式の入力は可能な限り回避する 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 8. シェルスクリプトで していないこと一撃 重視 例) ● 何がなんでも1枚のスクリプトファイルのみで完結することを 目的としなくてよい ● (インターネットに繋がっていることが前提ですが)設定ファイルが複数または 多岐にわたる場合は、GitHubなどから雛形ファイルをダウン ロードし、各々のホストで整形加工することもよしとする (これはベテラン勢によくありがちなのですが)いわゆる というものに○○準拠 対 しては、あまり するつもりはありません重視 。最終的に望むものが出来上 がるのであれば、人様に迷惑をかけない限り何をやってもよいと考えます。同一条件でインス トールされたOSで同じ結果が得られるのであれば、どんな言語やシェルを使っても構いません。 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 9. なぜシェルスクリプトでやるのか? 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 10. 第5回 一撃サーバー構築シェルスクリプト勉強会 ● インストール の対象 OSに めからあるコマンドだけで で初 完結 きる(基本的にyumで何かをインストールしたり、config書き換えたり) ● のための が環境構築 環境構築 不要 ● エージェントレスですよ奥さん! ● まさに一撃! ● シェルスクリプトの を ってしまえば ツールを くの文法 知 運用 書 にも が く応用 効 ● case、ヒアドキュメントあたりは使います。 ● 原則として綺麗な環境を前提としているのでifは余り使わない ● 一度きりの実行なので、forも余り使わない
  • 11. で一撃 Movable Typeをインストール 今回のテーマは... 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 12. Movable Typeとは シックス・アパートが開発するブログソフト/CMS。 ブログだけでなく、ウェブサイト単位でのウェブページや、ファ イルの管理、更新履歴の保存などCMSとしての基盤を進化させた パブリッシングプラットフォーム。 (公式サイト: http://www.sixapart.jp/movabletype/support/fundamental/about-mt.html より) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 13. の シェルスクリプトでやっていること今回 一撃 ● ドキュメントルートのディレクトリを作成し、ここにMovable Typeの ファイル一式を配置する ● iptables設定 ● MySQLインストールとdatabase「mt」作成 ● nginx+FCGIインストール ● nginx設定ファイルはヒアドキュメントで作成 ● fastcgi-wrapper.pl 作成 ● perl-fastcgi initスクリプト作成 ● perl-fastcgi initスクリプト 修正 ● パッケージ、OSのアップデート ● 再起動 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 14. しているコマンド使用 awk basename cat cd chkconfig chmod cp curl echo egrep grep ip iptables ls mkdir mv mysql reboot sed service tee unzip yum 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 15. パッケージのインストール ● 基本的にはyumでインストール ● ほとんどのパッケージは標準リポジトリ ● perlモジュールでMovable Typeが求める一部のパッ ケージはepelやrpmforgeリポジトリ ● MySQLは公式のコミュニティリポジトリ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 16. ファイルの設定 生成 ● nginxのバーチャルホスト設定ファイルは、一撃 シェルスクリプトの中でヒアドキュメントで生成 ● perl-fastcgiと、perl-fastcgiから呼び出されるfastcgi-wrapper.pl はWEBに公開されているものを流用 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 17. やること本日 1.Movable Typeダウンロードサイトへの登録 2.githubから一撃シェルスクリプトのダウンロード 3.さくらのクラウド コントロールパネルでスタートアップスクリプ ト登録 4.一撃サーバー構築 5.Movable Type設定 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 18. 1. Movable Typeダウンロードサイトへの登録 http://www.movabletype.jp/ へアクセス 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 19. 下へスクロール 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 20. ご自身のメールアドレスを入力し、利用目的に「初めて利用する」 を選び、「上記に同意して申し込む」をクリック 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 21. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 22. この画面が表示されたら、メール受信を確認します。 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 23. メールで通知されたログインキーを入力し、ログインする 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 24. MT-6_1.zip へのリンクを右クリック メニューからコピーする ※ リンクはメモ帳などに保存しておいてください 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 25. 2. githubから一撃シェルスクリプトのダウンロード 以下のURLから作業用PCへ、一撃シェルスクリプトをダウンロードしま す。 https://raw.githubusercontent.com/nullpopopo/sakura- cloud/master/ICHIGEKI-MT-CentOS6 ※ 文字コードはUTF-8、改行コードはLFで保存します ※ Windows環境の方は以下のエディタをおすすめします TeraPad http://www.forest.impress.co.jp/library/software/terapad/ サクラエディタ http://sakura-editor.sourceforge.net/index.html.ja 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 26. 第5回 一撃サーバー構築シェルスクリプト勉強会 Demo
  • 27. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 28. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 29. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 30. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 31. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 32. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 33. CentOS 6.6を選択 ディスクサイズは20GB 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 34. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 35. 複雑な覚えやす いパスワード (by さん横田 ) を入力する 任意のホスト名 を入力する 先ほど登録した スタートアップ スクリプトを選 択する 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 36. 任意のパスワード を入力する Movable Type ダウン ロードサイトでコピーした URLを貼り付ける 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 37. これらの項目は、後でわかりやすいように任意の値を入れてください。 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 38. 「作成後すぐに起動」にチェックを入れ、右下にある「作成」ボタンをクリック 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 39. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 40. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 41. サーバーが出来上がると、このように情報を見ることができます 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 42. コンソールからプロンプト が見えたらログイン可能 ※ コンソールから作業する とコピペしにくいので、ssh 接続推奨 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 43. サーバーのIPアドレスは「NIC」をクリックした後、↑の赤い枠に囲われた 箇所に表示されます。 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 44. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 45. 休 憩 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 46. コードの な簡単 解説 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 47. コードの構成 1.さくらのクラウド スタートアップスクリプトの特殊タグ設定 2.自身のhosts登録 3.Movable Typeダウンロードとドキュメントルート作成 4.iptables設定 5.MySQLインストール+データベース作成 6.nginx+FCGIインストール 7.initスクリプト作成 8.nginx、FCGI起動 〜 yum update+再起動 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 48. 1. さくらのクラウド スタートアップスクリプトの タグ特殊 設定 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 49. # @sacloud­once スタートアップスクリプトの動作 サーバ作成画面でスタートアップスクリプトを選択すると、起動後のサー バ内で以下の動作が行われます。 1. 起動時、/etc/rc.localが/root/.sacloud-api/startup.shを実行 2.startup.shが、「スタートアップスクリプト」で指定したスクリプト (“/root/.sacloud-api/notes/スタートアップスクリプトID“に配置)を実行 3. ”スクリプトが実行され、ログが /root/.sacloud-api/notes/スタートアップ スクリプトID.log”に出力される 4. スクリプトが しく各 正 ( コードが終了 ”0″) すると、終了 ”/root/.sacloud- api/notes/スタートアップスクリプトID.done”という の ファイル名前 空 を作成(このファイルが すると存在 @sacloud-once を したスクリ指定 プトは されない実行 ) http://cloud-news.sakura.ad.jp/startup-script/ より 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 50. # @sacloud­desc サーバ作成後、サーバのIPアドレスをhostsに登録 してブラウザでアクセスしてください。 # @sacloud­desc (このスクリプトは、CentOS6.XもしくはScientific  Linux6.Xでのみ動作します) # @sacloud­desc Movable TypeダウンロードURL 入力例:  https://xxxxxxxxxxxxxxxxxx/ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 51. # @sacloud­text required shellarg maxlen=200 durl "Movable TypeダウンロードURL" # @sacloud­password required shellarg maxlen=100 rootpw "MySQLのパスワード" DURL=@@@durl@@@ ROOTPW=@@@rootpw@@@ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 52. スタートアップスクリプトの特殊タグを理解するには http://cloud-news.sakura.ad.jp/startup-script/ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 53. 2. の自身 hosts登録 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 54. eth0のIPアドレスをhostsに登録 ● IPアドレスを抜き出す # ip a show dev eth0 | egrep '(inet )' | awk '{print $2}' | sed ­e 's//[0­9]*//g' 133.242.xxx.xxx ● IPアドレスとホスト名を2タブ区切りで表示 # echo $(ip a show dev eth0 | egrep '(inet )' | awk '{print $2}' | sed ­e 's//[0­9]*//g') $ {HOSTNAME} | awk '{print $1"t""t"$2}' 133.242.xxx.xxx mt001 ● あとはteeコマンドでhostsファイルに追記 # cp ­p /etc/hosts{,.orig} # echo $(ip a show dev eth0 | egrep '(inet )' | awk '{print $2}' | sed ­e 's//[0­9]*//g') $ {HOSTNAME} | awk '{print $1"t""t"$2}' | tee ­a /etc/hosts 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 55. 3. Movable Typeダウンロードとドキュメントルート作成 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 56. HOME=/root export HOME mkdir ­p /var/www mkdir ­p ${HOME}/src cd ${HOME}/src FILENAME=$(basename ${DURL} | awk 'BEGIN {FS="?"} {print $1}') curl ­o ${FILENAME} ${DURL} unzip ${FILENAME} mv $(ls | grep ­v zip$) /var/www/html cd ${HOME} これを1つ1つコマンド いてみるとどうなるか叩 ? ( のところは します変数 省略 ) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 57. [root@mt001 ~]# mkdir -p /var/www [root@mt001 ~]# mkdir src [root@mt001 ~]# cd src [root@mt001 src]# DURL="https://〜〜〜/file_download.php/MT-6_1.zip? id=9&type=MT6" [root@mt001 src]# FILENAME=$(basename ${DURL} | awk 'BEGIN {FS="?"} {print $1}') [root@mt001 src]# echo $FILENAME MT-6_1.zip (続きます) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 58. [root@mt001 src]# curl -o ${FILENAME} ${DURL} # ll 合計 17928 -rw-r--r-- 1 root root 18354703 3月 4 13:27 2015 MT-6_1.zip [root@mt001 src]# unzip ${FILENAME} [root@mt001 src]# ls MT-6.1 MT-6_1.zip [root@mt001 src]# ls | grep -v zip$ MT-6.1 [root@mt001 src]# mv $(ls | grep -v zip$) /var/www/html 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 59. 4. iptables設定 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 60. 第5回 一撃サーバー構築シェルスクリプト勉強会 コマンド 内容 ser vi ce i pt abl es st op i pt abl es - P I NPUT DROP 外部からのパケットはすべて拒否する i pt abl es - P OUTPUT ACCEPT i pt abl es - P FORWARD DROP パケット転送はすべて拒否する i pt abl es - A I NPUT - i l o - j ACCEPT i pt abl es - A I NPUT - p t cp - - dpor t 22 - j ACCEPT i pt abl es - A I NPUT - p t cp - - dpor t 80 - j ACCEPT ser vi ce i pt abl es save 設定を保存 ser vi ce i pt abl es st ar t chkconf i g i pt abl es on i pt abl es停止 自ホストから外部へのパケットはすべて 許可する l ocal host からのアクセスをすべて許可 i pt abl es - A I NPUT - m st at e - - st at e ESTABLI SHED, RELATED - j ACCEPT 内部から行ったアクセスに対する外部か らの返答アクセスを許可 外部からのTCP22番ポート(SSH)へのア クセスを許可 外部からのTCP80番ポート(HTTP)へのア クセスを許可 i pt abl esを起動 i pt abl esをスタートアップ登録する
  • 61. 第5回 一撃サーバー構築シェルスクリプト勉強会 [root@mt001 ~]# iptables -L -n Chain INPUT (policy DROP) target prot opt source destination fail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-SSH (1 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0
  • 62. 5. MySQLインストール+データベース作成 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 63. yum ­y install http://dev.mysql.com/get/mysql­community­release­el6­ 5.noarch.rpm yum ­y install mysql­community­server service mysqld start chkconfig mysqld on MySQLコミュニティのYUMリポジトリをインストール MySQLサーバーをインストール MySQLサーバーを起動および自動起動設定 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 64. mysql ­u root ­e "SET PASSWORD FOR  root@localhost=PASSWORD('${ROOTPW}');" MySQLのrootパスワードを設定。 (localhost) 変数「ROOTPW」はサーバー作成時に指定したもの -eオプションをつけることでシェルを われない奪 ! 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 65. mysql ­u root ­p${ROOTPW} ­e "SET PASSWORD FOR root@"$ {HOSTNAME}"=PASSWORD('${ROOTPW}');" MySQLのrootパスワードを設定。 (ホスト名) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 66. mysql ­u root ­p${ROOTPW} ­e "SET PASSWORD FOR  root@127.0.0.1=PASSWORD('${ROOTPW}');" MySQLのrootパスワードを設定。 (127.0.0.1) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 67. mysql ­u root ­p${ROOTPW} ­e "SET PASSWORD FOR  root@"::1"=PASSWORD('${ROOTPW}');" MySQLのrootパスワードを設定。 (::1) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 68. mysql ­u root ­p${ROOTPW} ­e "delete from mysql.user where  password='';" パスワードのカラムが空のユーザーを削除する(すなわち匿名 ユーザーも削除される) 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 69. mysql ­u root ­p${ROOTPW} ­e 'FLUSH PRIVILEGES;' 権限テーブルを再読み込みする 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 70. mysql ­u root ­p${ROOTPW} ­e "create database mt;" データベース「mt」作成 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 71. [root@mt001 ~]# grep ^ROOTPW .sacloud-api/notes/〜〜〜 ROOTPW='********' 変数に格納したMySQLの rootパスワードは後で確認 可能 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 72. [root@mt001 ~]# mysql -u root -p${ROOTPW} -e "select user,password,host from mysql.user;" Warning: Using a password on the command line interface can be insecure. +------+-------------------------------------------+-----------+ | user | password | host | +------+-------------------------------------------+-----------+ | root | *C4AAE40CA5DC4AB9F085432AD4EB43955369AB7A | localhost | | root | *C4AAE40CA5DC4AB9F085432AD4EB43955369AB7A | mt001 | | root | *C4AAE40CA5DC4AB9F085432AD4EB43955369AB7A | 127.0.0.1 | | root | *C4AAE40CA5DC4AB9F085432AD4EB43955369AB7A | ::1 | +------+-------------------------------------------+-----------+ 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 73. 第5回 一撃サーバー構築シェルスクリプト勉強会 6. nginx+FCGIインストール
  • 74. 第5回 一撃サーバー構築シェルスクリプト勉強会 yum -y install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release- centos-6-0.el6.ngx.noarch.rpm cp -p /etc/yum.repos.d/nginx.repo /etc/yum.repos.d/nginx.repo.orig sed -i 's/centos/mainline/centos/' /etc/yum.repos.d/nginx.repo nginxのリポジトリをイン ストール nginxのリポジトリをmainline に変更
  • 75. 第5回 一撃サーバー構築シェルスクリプト勉強会 yum -y install perl-DBI perl-DBD-MySQL perl-Archive-Zip perl- XML-SAX perl-XML-LibXML perl-XML-NamespaceSupport perl-Digest- SHA perl-GD gd libXpm perl-Crypt-SSLeay perl-Archive-Tar perl- IO-Zlib perl-Package-Constants ImageMagick-perl perl-Time-HiRes yum -y --enablerepo=epel install perl-FCGI perl-Crypt-DSA yum -y --enablerepo=rpmforge install perl-XML-SAX-Expat perl- Imager yum -y install nginx perlのモジュールたちをイ ンストール nginxインストール
  • 76. 第5回 一撃サーバー構築シェルスクリプト勉強会 cp -p /etc/nginx/nginx.conf{,.orig} sed -i "s/worker_processes[[:space:]]+[0-9]+/worker_processes $(cat /proc/cpuinfo | grep processor | wc -l)/g" /etc/nginx/nginx.conf デフォルトのnginx設定 ファイルをバックアップ nginxのworker_processesをCPU のコア数に合わせる
  • 77. 第5回 一撃サーバー構築シェルスクリプト勉強会 # cat /proc/cpuinfo | grep ^processor processor : 0 processor : 1 processor : 2 processor : 3 # diff /etc/nginx/nginx.conf{,.orig} 3c3 < worker_processes 4; --- > worker_processes 1;
  • 78. 第5回 一撃サーバー構築シェルスクリプト勉強会 mkdir -p /etc/nginx/conf.d/BACKUP mv /etc/nginx/conf.d/*.conf /etc/nginx/conf.d/BACKUP/ cat << _EOL_ | tee /etc/nginx/conf.d/000_MT.conf server { ... (略) } _EOL_ デフォルトのnginx設定 ファイルをバックアップ nginx設定ファイルをヒア ドキュメントで生成
  • 79. 第5回 一撃サーバー構築シェルスクリプト勉強会 nginx設定 (抜粋) server { listen 80; server_name ${HOSTNAME}; location / { root /var/www/html; index index.html index.htm index.cgi index.pl; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } ... } ヒアドキュメントの中で HOSTNAME変数が展開され る indexの順序に注意 ※ .cgiと.plを後ろにしないと mt.cgiが優先されてしまう
  • 80. 第5回 一撃サーバー構築シェルスクリプト勉強会 nginx設定 (抜粋) location ~ .pl$ { gzip off; root /var/www/html; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:8999; fastcgi_index index.pl; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ .cgi$ { gzip off; root /var/www/html; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:8999; fastcgi_index index.cgi; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } ヒアドキュメントの中で変 数を展開しないようエス ケープしている
  • 81. 第5回 一撃サーバー構築シェルスクリプト勉強会 7. initスクリプト作成
  • 82. 第5回 一撃サーバー構築シェルスクリプト勉強会 nginx+perl-fastcgi 起動の仕組み ● fastcgi-wrapper.pl と perl-fastcgi は www.linode.com からダウンロードする ● perl-fastcgi はダウンロード後、数カ所の修正を行う nginx perl-fastcgi /etc/rc.d/init.d/nginx から起動 /etc/rc.d/init.d/perl-fastcgi から fastcgi-wrapper.pl を起動 参考: https://www.linode.com/docs/websites/nginx/nginx-and-perlfastcgi-on-centos- 5
  • 83. 第5回 一撃サーバー構築シェルスクリプト勉強会 fastcgi-wrapper.pl 入手 curl -L -o /usr/bin/fastcgi-wrapper.pl http://www.linode.com/docs/assets/642-fastcgi- wrapper.sh chmod 700 /usr/bin/fastcgi-wrapper.pl
  • 84. 第5回 一撃サーバー構築シェルスクリプト勉強会 perl-fastcgi 入手 PERLFCGIDAEMON=/etc/rc.d/init.d/perl-fastcgi curl -L -o ${PERLFCGIDAEMON} http://www.linode.com/docs/assets/641-init-rpm.sh (中略) chmod 700 ${PERLFCGIDAEMON} ※ 「中略 (sedでinitスクリプトの修正)」の部分は休憩後に解説しま す
  • 85. 第5回 一撃サーバー構築シェルスクリプト勉強会 き ゅ う け い
  • 86. 第5回 一撃サーバー構築シェルスクリプト勉強会 サーバーにログインしてtmpディレクトリを作り、実際にsedでど う置換されるのかを見てみましょう。 # mkdir -p ${HOME}/tmp # cd $_ # PERLFCGIDAEMON=./perl-fastcgi # curl -L -o ${PERLFCGIDAEMON} http://www.linode.com/docs/assets/641- init-rpm.sh # cp -p ${PERLFCGIDAEMON} ${PERLFCGIDAEMON}.orig
  • 87. 第5回 一撃サーバー構築シェルスクリプト勉強会 sed -i '/^#[[:space:]][ndpc][gerio]*/d' $ {PERLFCGIDAEMON} の行頭 descriptionを するために する修正 一旦削除
  • 88. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep '(^#[[:space:]] [ndpc][gerio]*)' # nginx – this script starts and stops the nginx daemon # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse # proxy and IMAP/POP3 proxy server # processname: nginx # config: /opt/nginx/conf/nginx.conf # pidfile: /opt/nginx/logs/nginx.pid
  • 89. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i '/^#[[:space:]][ndpc][gerio]*/d' $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '(^#[[:space:]] [ndpc][gerio]*)' 何も表示されない
  • 90. 第5回 一撃サーバー構築シェルスクリプト勉強会 とは え言 descriptionがないのも なので する不都合 追加 (たまたま2 と行目 3 に のコメントが ったのでこれを する行目 空 残 利用 ) sed -i '2s/^#$/# perl-fastcgi/' $ {PERLFCGIDAEMON} sed -i '3s/^#$/# description: this script starts and stops the perl-fastcgi daemon/' $ {PERLFCGIDAEMON}
  • 91. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i '2s/^#$/# perl-fastcgi/' $ {PERLFCGIDAEMON} # sed -i '3s/^#$/# description: this script starts and stops the perl-fastcgi daemon/' $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '(^#[[:space:]] [ndpc][gerio]*)' # perl-fastcgi # description: this script starts and stops the perl-fastcgi daemon
  • 92. 第5回 一撃サーバー構築シェルスクリプト勉強会 3行目 descriptionの に直下 「# chkconfig: - 85 15 を する」 追加 sed -i "3a # chkconfig: - 85 15" $ {PERLFCGIDAEMON}
  • 93. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i "3a # chkconfig: - 85 15" $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '(^#[[:space:]] [ndpc][gerio]*)' # perl-fastcgi # description: this script starts and stops the perl-fastcgi daemon # chkconfig: - 85 15
  • 94. 第5回 一撃サーバー構築シェルスクリプト勉強会 「nginx="/opt/nginx/sbin/nginx" を」 「perlfastcgi="/usr/bin/fastcgi-wrapper.pl" に す」 直 sed -i s/^nginx=["/ [:alnum:]]*/perlfastcgi='"/usr/bin/fastcgi- wrapper.pl"'/ ${PERLFCGIDAEMON}
  • 95. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep '^(nginx=| perlfastcgi)' nginx="/opt/nginx/sbin/nginx"
  • 96. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i s/^nginx=["/ [:alnum:]]*/perlfastcgi='"/usr/bin/fastcgi- wrapper.pl"'/ ${PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '^(nginx=| perlfastcgi)' perlfastcgi="/usr/bin/fastcgi-wrapper.pl" 変数名がnginxからperlfastcgiに、変数の中身も /opt/nginx/sbin/nginx から /usr/bin/fastcgi-wrapper.pl に変わった
  • 97. 第5回 一撃サーバー構築シェルスクリプト勉強会 「prog=$(basename $nginx) を」 「prog=$(basename perl) に す」 直 sed -i 's/prog=$(basename $nginx)/prog=$ (basename perl)/' ${PERLFCGIDAEMON}
  • 98. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep '^(prog=)' prog=$(basename $nginx)
  • 99. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/prog=$(basename $nginx)/prog=$ (basename perl)/' ${PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '^(prog=)' prog=$(basename perl) prog変数の中身がnginxから perlに変わった
  • 100. 第5回 一撃サーバー構築シェルスクリプト勉強会 「NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf" で まる を する」 始 行 削除 sed -i s/^NGINX_[[:alnum:]_="./]*// $ {PERLFCGIDAEMON}
  • 101. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep '(^NGINX_[[:alnum:]_="./]*)' NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"
  • 102. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i s/^NGINX_[[:alnum:]_="./]*// $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '(^NGINX_[[:alnum:]_="./]*)' 何も表示されない
  • 103. 第5回 一撃サーバー構築シェルスクリプト勉強会 sed -i 's/lockfile=/var/lock/subsys/nginx/lockfile =/var/lock/subsys/perl-fastcgi/' $ {PERLFCGIDAEMON} 「lockfile=/var/lock/subsys/nginx を」 「lockfile=/var/lock/subsys/perl-fastcgi に す」 直
  • 104. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep '^(lockfile=)' lockfile=/var/lock/subsys/nginx
  • 105. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/lockfile=/var/lock/subsys/nginx/lockfile =/var/lock/subsys/perl-fastcgi/' $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep '^(lockfile=)' lockfile=/var/lock/subsys/perl-fastcgi lockfile変数の中身がnginxから perl-fastcgiに変わった
  • 106. 第5回 一撃サーバー構築シェルスクリプト勉強会 start関数の中の「 [ -x $nginx ] || exit 5 」 を 「 [ -x $perlfastcgi ] || exit 5 」に直す sed -i 's/[ -x $nginx ] || exit [0-9]/[ -x $perlfastcgi ] || exit 5/' ${PERLFCGIDAEMON}
  • 107. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep "^([ -x $ [np][[:alpha:]]* ] || exit [0-9])" [ -x $nginx ] || exit 5
  • 108. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/[ -x $nginx ] || exit [0-9]/[ -x $perlfastcgi ] || exit 5/' ${PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep "^([ -x $ [np][[:alpha:]]* ] || exit [0-9])" [ -x $perlfastcgi ] || exit 5 testコマンドの条件式が、「もしnginxが 実行可でなければ」から「もしperl-fcgi が実行可でなければ」に書き換わった ※ どうでもいいですが、この条件式を日本語にすると不自然ですよね? [ ! -x $perlfastcgi ] && exit 5 のほうがシックリくる。。。 ほんとどうでもいいんですが。
  • 109. 第5回 一撃サーバー構築シェルスクリプト勉強会 start関数の中の 「 [ -f $NGINX_CONF_FILE ] || exit 6 」 を削除する sed -i 's/[ -f $NGINX_CONF_FILE ] || exit [0- 9]//' ${PERLFCGIDAEMON}
  • 110. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep "^([ -f $NGINX_CONF_FILE ] || exit [0-9])" [ -f $NGINX_CONF_FILE ] || exit 6
  • 111. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/[ -f $NGINX_CONF_FILE ] || exit [0-9]//' ${PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep "^([ -f $NGINX_CONF_FILE ] || exit [0-9])" 何も表示されない
  • 112. 第5回 一撃サーバー構築シェルスクリプト勉強会 start の の関数 中 「daemon $nginx -c $NGINX_CONF_FILE」 を「daemon $perlfastcgi に す」 直 sed -i 's/daemon $nginx -c $NGINX_CONF_FILE/daemon $perlfastcgi/' $ {PERLFCGIDAEMON}
  • 113. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep "^(daemon)" daemon $nginx -c $NGINX_CONF_FILE
  • 114. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/daemon $nginx -c $NGINX_CONF_FILE/daemon $perlfastcgi/' $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep "^(daemon)" daemon $perlfastcgi fastcgi-wrapper.pl を daemonとして動かすようにした
  • 115. 第5回 一撃サーバー構築シェルスクリプト勉強会 restart関数とreload関数の中から「configtest || return $?」を削除する sed -i 's/configtest || return $?//g' $ {PERLFCGIDAEMON}
  • 116. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep "(configtest || return $?$)" configtest || return $? configtest || return $?
  • 117. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/configtest || return $?//g' $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep "(configtest || return $?$)" 何も表示されない
  • 118. 第5回 一撃サーバー構築シェルスクリプト勉強会 reload関数内の「killproc $nginx -HUP」を 「killproc $prog -HUP」に直す -> HUPすると死んで しまうので「stop ; start」に直す sed -i 's/killproc $nginx -HUP/stop ; start/' $ {PERLFCGIDAEMON}
  • 119. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep "^(killproc $nginx -HUP|stop ; start)" killproc $nginx -HUP
  • 120. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/killproc $nginx -HUP/stop ; start/' ${PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep "^(killproc $nginx -HUP|stop ; start)" stop ; start reload関数が実行されたときの動作が killproc $nginx -HUP から stop -> start に変わった
  • 121. 第5回 一撃サーバー構築シェルスクリプト勉強会 60〜62行目、「configtest」を関数ごと削除する sed -i '60,62d' ${PERLFCGIDAEMON}
  • 122. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat -n ${PERLFCGIDAEMON} | grep -A 2 configtest() 60 configtest() { 61 $nginx -t -c $NGINX_CONF_FILE 62 }
  • 123. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i '60,62d' ${PERLFCGIDAEMON} # cat -n ${PERLFCGIDAEMON} | grep -A 2 configtest() 何も表示されない
  • 124. 第5回 一撃サーバー構築シェルスクリプト勉強会 case文の中で引数にrestartとconfigtestを与えたとき の条件を、restartのみに変更する (configtest関数を削除したため) sed -i 's/restart|configtest/restart/' $ {PERLFCGIDAEMON}
  • 125. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat ${PERLFCGIDAEMON} | egrep -A 2 '(^restart[[:alnum:]|)]*$)' | tail -n 3 restart|configtest) $1 ;; これを削除したい
  • 126. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i 's/restart|configtest/restart/' $ {PERLFCGIDAEMON} # cat ${PERLFCGIDAEMON} | egrep -A 2 '(^restart[[:alnum:]|)]*$)' | tail -n 3 restart) $1 ;; case文の引数判定がrestartと configtestの両方だったのが restartのみに変更された
  • 127. 第5回 一撃サーバー構築シェルスクリプト勉強会 95 、行目 Usageの から行 configtestを する削除 sed -i "95s/|configtest//" ${PERLFCGIDAEMON}
  • 128. 第5回 一撃サーバー構築シェルスクリプト勉強会 [Before] # cat -n ${PERLFCGIDAEMON} | grep Usage | grep |configtest}" 95 echo $"Usage: $0 {start|stop|status|restart| condrestart|try-restart|reload|force-reload| configtest}"
  • 129. 第5回 一撃サーバー構築シェルスクリプト勉強会 [After] # sed -i "95s/|configtest//" ${PERLFCGIDAEMON} # cat -n ${PERLFCGIDAEMON} | grep Usage | grep |configtest}" # cat -n ${PERLFCGIDAEMON} | grep Usage 95 echo $"Usage: $0 {start|stop|status| restart|condrestart|try-restart|reload|force- reload}" 何も表示されない
  • 130. 第5回 一撃サーバー構築シェルスクリプト勉強会 8. nginx、FCGI起動 〜 yum update+再起動
  • 131. 第5回 一撃サーバー構築シェルスクリプト勉強会 chmod 700 ${PERLFCGIDAEMON} chkconfig --add perl-fastcgi chkconfig perl-fastcgi on service perl-fastcgi start service nginx start chkconfig nginx on yum -y update reboot
  • 132. 第5回 一撃サーバー構築シェルスクリプト勉強会 $ echo$ echo 求刑求刑 | | sed -e 's/sed -e 's/求求//休休/;s//;s/刑刑//憩憩/'/'
  • 133. 第5回 一撃サーバー構築シェルスクリプト勉強会 Movable Type 設定
  • 134. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 135. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 136. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 137. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 138. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 139. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 140. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 141. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 142. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 143. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 144. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 145. 第5回 一撃サーバー構築シェルスクリプト勉強会 ウェブサイトパス は /var/www/html のまま!
  • 146. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 147. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 148. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 149. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 150. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 151. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 152. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 153. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 154. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 155. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 156. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 157. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 158. 第5回 一撃サーバー構築シェルスクリプト勉強会
  • 159. 第5回 一撃サーバー構築シェルスクリプト勉強会 お れ でした疲 様
  • 160. 第5回 一撃サーバー構築シェルスクリプト勉強会 質疑応 答
  • 161. 第5回 一撃サーバー構築シェルスクリプト勉強会 #!/beer/bash