• 検索結果がありません。

[自己紹介] 名前: 濱田康貴 ) Blog Facebook

N/A
N/A
Protected

Academic year: 2021

シェア "[自己紹介] 名前: 濱田康貴 ) Blog Facebook"

Copied!
161
0
0

読み込み中.... (全文を見る)

全文

(1)

第5回 一撃サーバー構築シェルスクリプト勉強会

USP友の会 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)

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

(7)

「シェルスクリプト

(と設定ファイルのひな形)

を用

意すれば、コマンドを1回実行するだけで環境

構築ができてしまうというスグレモノ」

を目指し ています。(「一撃シェルスクリプト」は @nullpopopo の造語です) 現在のところ、線引きとして以下のように詳細なルールを作っています。 ● OSインストール直後に一撃シェルスクリプトを配置して動かす ものとする ● 実行回数は1回のみで、人が張り付く必要のない設計とする ● 対話式の入力は可能な限り回避する 第5回 一撃サーバー構築シェルスクリプト勉強会

(8)

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

例) ● 何がなんでも1枚のスクリプトファイルのみで完結することを 目的としなくてよい ● (インターネットに繋がっていることが前提ですが)設定ファイルが複数または 多岐にわたる場合は、GitHubなどから雛形ファイルをダウン ロードし、各々のホストで整形加工することもよしとする (これはベテラン勢によくありがちなのですが)いわゆる○○準拠というものに 対しては、あまり重視するつもりはありません。最終的に望むものが出 来上がるのであれば、人様に迷惑をかけない限り何をやってもよいと考えます。同一条件でイン ストールされたOSで同じ結果が得られるのであれば、どんな言語やシェルを使っても構いませ ん。 第5回 一撃サーバー構築シェルスクリプト勉強会

(9)

なぜシェルスクリプトでやるのか?

(10)

第5回 一撃サーバー構築シェルスクリプト勉強会 ● インストール対象のOSに初めからあるコマンドだけで完結で きる(基本的にyumで何かをインストールしたり、config書き換えたり) ● 環境構築のための環境構築が不要 ● エージェントレスですよ奥さん! ● まさに一撃! ● シェルスクリプトの文法を知ってしまえば運用ツールを書く のにも応用が効く ● case、ヒアドキュメントあたりは使います。 ● 原則として綺麗な環境を前提としているのでifは余り使わない ● 一度きりの実行なので、forも余り使わない

(11)

一撃でMovable Typeをインストール

今回のテーマは...

(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

(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/ へアクセス

(19)

下へスクロール

(20)

ご自身のメールアドレスを入力し、利用目的に「初めて利用する」 を選び、「上記に同意して申し込む」をクリック

(21)
(22)

この画面が表示されたら、メール受信を確認します。 第5回 一撃サーバー構築シェルスクリプト勉強会

(23)

メールで通知されたログインキーを入力し、ログインする

(24)

MT-6_1.zip へのリンクを右クリック メニューからコピーする

※ リンクはメモ帳などに保存しておいてください

(25)

2. githubから一撃シェルスクリプトのダウンロード

以下のURLから作業用PCへ、一撃シェルスクリプトをダウンロードしま す。

https://raw.githubusercontent.com/nullpopopo/sakura-cloud/master/ICHIGEKI-MT-CentOS6

※ 文字コードはUTF-8、改行コードはLFで保存します ※ Windows環境の方は以下のエディタをおすすめします 第5回 一撃サーバー構築シェルスクリプト勉強会

(26)

第5回 一撃サーバー構築シェルスクリプト勉強会

(27)
(28)
(29)
(30)
(31)
(32)
(33)

CentOS 6.6を選択

ディスクサイズは20GB

(34)
(35)

複雑な覚えやす いパスワード (by横田さん) を入力する 任意のホスト名 を入力する 先ほど登録した スタートアップ スクリプトを選 第5回 一撃サーバー構築シェルスクリプト勉強会

(36)

任意のパスワード

を入力する Movable Type ダウンロードサイトでコピーした

URLを貼り付ける 第5回 一撃サーバー構築シェルスクリプト勉強会

(37)

これらの項目は、後でわかりやすいように任意の値を入れてください。

(38)

「作成後すぐに起動」にチェックを入れ、右下にある「作成」ボタンをクリック

(39)
(40)
(41)

サーバーが出来上がると、このように情報を見ることができます

(42)

コンソールからプロンプト が見えたらログイン可能 ※ コンソールから作業する とコピペしにくいので、ssh 接続推奨 第5回 一撃サーバー構築シェルスクリプト勉強会

(43)

サーバーのIPアドレスは「NIC」をクリックした後、↑の赤い枠に囲われ た箇所に表示されます。

(44)
(45)

休憩

(46)

コードの簡単な解説

(47)

コードの構成

1.さくらのクラウド スタートアップスクリプトの特殊タグ設定 2.自身のhosts登録 3.Movable Typeダウンロードとドキュメントルート作成 4.iptables設定 5.MySQLインストール+データベース作成 6.nginx+FCGIインストール 7.initスクリプト作成

8.nginx、FCGI起動 〜 yum update+再起動

(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 を指定したスクリプトは実行されない) 第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@@@

(52)

スタートアップスクリプトの特殊タグを理解するには

http://cloud-news.sakura.ad.jp/startup-script/

(53)

2. 自身のhosts登録

(54)

eth0のIPアドレスをhostsに登録 ● IPアドレスを抜き出す # ip a show dev eth0 | egrep '(inet )' | awk '{print $2}' | sed ­e 's/\/[0­9]*//g' 133.242.xxx.xxxIPアドレスとホスト名を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 (続きます)

(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

(59)

4. iptables設定

(60)

第5回 一撃サーバー構築シェルスクリプト勉強会

コマンド 内容

service iptables stop

iptables -P INPUT DROP 外部からのパケットはすべて拒否する iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP パケット転送はすべて拒否する iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT

service iptables save 設定を保存 service iptables start

chkconfig iptables on

iptables停止

自ホストから外部へのパケットはすべて 許可する

localhostからのアクセスをすべて許可 iptables -A INPUT -m state --state ESTABLISHED,RELATED

-j ACCEPT 内部から行ったアクセスに対する外部からの返答アクセスを許可 外部からのTCP22番ポート(SSH)へのア クセスを許可 外部からのTCP80番ポート(HTTP)へのア クセスを許可 iptablesを起動 iptablesをスタートアップ登録する

(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インストール+データベース作成

(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サーバーをインストール 第5回 一撃サーバー構築シェルスクリプト勉強会

(64)

mysql ­u root ­e "SET PASSWORD FOR 

root@localhost=PASSWORD('${ROOTPW}');"

MySQLのrootパスワードを設定。 (localhost)

変数「ROOTPW」はサーバー作成時に指定したもの

-eオプションをつけることでシェルを奪われない!

(65)

mysql ­u root ­p${ROOTPW} ­e "SET PASSWORD FOR root@\"$ {HOSTNAME}\"=PASSWORD('${ROOTPW}');"

MySQLのrootパスワードを設定。 (ホスト名)

(66)

mysql ­u root ­p${ROOTPW} ­e "SET PASSWORD FOR  [email protected]=PASSWORD('${ROOTPW}');"

MySQLのrootパスワードを設定。 (127.0.0.1)

(67)

mysql ­u root ­p${ROOTPW} ­e "SET PASSWORD FOR  root@\"::1\"=PASSWORD('${ROOTPW}');"

MySQLのrootパスワードを設定。 (::1)

(68)

mysql ­u root ­p${ROOTPW} ­e "delete from mysql.user where  password='';"

パスワードのカラムが空のユーザーを削除する(すなわち匿名 ユーザーも削除される)

(69)

mysql ­u root ­p${ROOTPW} ­e 'FLUSH PRIVILEGES;' 権限テーブルを再読み込みする

(70)

mysql ­u root ­p${ROOTPW} ­e "create database mt;" データベース「mt」作成

(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 | +---+---+---+

(73)

第5回 一撃サーバー構築シェルスクリプト勉強会

(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 DBI DBD-MySQL Archive-Zip perl-XML-SAX perl-XML-LibXML perl-XML-NamespaceSupport Digest-SHA GD gd libXpm Crypt-SSLeay 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 XML-SAX-Expat perl-Imager

yum -y install nginx

perlのモジュールたちを インストール

(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回 一撃サーバー構築シェルスクリプト勉強会

(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}

(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

(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

(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

(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)'

(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 から

(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=)'

(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:]_=\"\\./]*)'

(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=)'

(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])"

(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])"

(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)"

(114)

第5回 一撃サーバー構築シェルスクリプト勉強会

[After]

# sed -i 's/daemon $nginx -c

$NGINX_CONF_FILE/daemon $perlfastcgi/' $ {PERLFCGIDAEMON}

# cat ${PERLFCGIDAEMON} | egrep "^(daemon)"

daemon $perlfastcgi

fastcgi-wrapper.pl を

(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)"

(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

(121)

第5回 一撃サーバー構築シェルスクリプト勉強会

60〜62行目、「configtest」を関数ごと削除する

(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を削除する

(128)

第5回 一撃サーバー構築シェルスクリプト勉強会

[Before]

# cat -n ${PERLFCGIDAEMON} | grep Usage | grep \|configtest\}\"

95 echo $"Usage: $0 {start|stop|status|restart|

condrestart|try-restart|reload|force-reload|

(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|

(130)

第5回 一撃サーバー構築シェルスクリプト勉強会

(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

(132)

第5回 一撃サーバー構築シェルスクリプト勉強会

$ echo

$ echo 求刑

求刑 | \

| \

sed -e 's/

(133)

第5回 一撃サーバー構築シェルスクリプト勉強会

(134)
(135)
(136)
(137)
(138)
(139)
(140)
(141)
(142)
(143)
(144)
(145)

第5回 一撃サーバー構築シェルスクリプト勉強会

ウェブサイトパス は /var/www/html のまま!

(146)
(147)
(148)
(149)
(150)
(151)
(152)
(153)
(154)
(155)
(156)
(157)
(158)
(159)

第5回 一撃サーバー構築シェルスクリプト勉強会

(160)

第5回 一撃サーバー構築シェルスクリプト勉強会

(161)

第5回 一撃サーバー構築シェルスクリプト勉強会

参照

関連したドキュメント

[r]

本資料は Linux サーバー OS 向けプログラム「 ESET Server Security for Linux V8.1 」の機能を紹介した資料です。.. ・ESET File Security

  安倍小水麿願経とは ︑﹁ 無災殃而不肖 ︑無福楽而不成者 ︑般若之金言 ︑真空之妙典 ︑被称諸仏之父母 ︑聖賢之師範 也

Facebook→https://m.f acebook.com/KGBbr oadcast Twitter→https://twitt er.com/KGBbroadc ast 関西学院大学で唯一 の放送団体。アナウ ンス、

C :はい。榎本先生、てるちゃんって実践神学を教えていたんだけど、授

问: 我经常登录一些社交网站,并在该等网站上表明自己是安森美的员工。我在工作的时候从来不使 用 Facebook 或

29年度 前年比 介護保険 6,528名 6,524名 99.9%. 介護予防 0名 0名 ― 合計 6,528名 6,524名

① Besides  receiving  a  B.A.  in  psychology  at  U.C.L.A., I studied early childhood education at  San Francisco State University in the graduate  program