Ubuntu&NetBookによるWebサーバ構築メモ 2011/03/17〜21 2004年頃にデスクトップ(自作)PC上にて、Fedora2でWebサーバ稼動。 今まで元気に稼動させてきた訳なんですが、例の震災による計画停電を受けて 急遽ATOMのNetBookでWebサーバ構築しようと思い立ち、以下はその構築記。 Ubuntuはあまり良く分かっていないので、手探りにて。 ■環境・OS選定 我が家唯一のノートPCとなるMSiU100Plusを利用。 バッテリーによる公称駆動時間は2.5時間、計画停電3時間より少ないけど 基本、液晶を止めたまま運用するんで、持つ事を祈って。 元々入っていたXPは活かしつつ、パーティション分けでマルチブート。 OSについては、ubuntu-10.04LTS-desktop-i386.iso を利用。 上記NetNookに対しVideoDriverも認識し、BootLoaderも正しく動作したのが 選定理由。なるべくGUIを使う方針なので、ubuntu server版は敢えてスルー。 その他の候補については以下の通りNG Fedora12:画面認識せず(テキストMODE化) Fedora14:USB bootが妙なエラーで上手くいかん CD焼きで通ったものの英語専用&BootLoaderがFedora専用に。 CentOS5.5:画面認識せず(テキストMODE化) Ubuntu10.10:USB bootが妙なエラーで上手くいかん ■OS導入 先のisoイメージを unetbootin-windows というソフトで起動USBメモリ化。 元々MSiU100Plusは160GB HDDがXPシステムに60GB、データに100GBと パーティション分けされているので、予め後者側をパーティションクリア。 USBメモリから起動、言語&キーは日本語を選び、導入先は最大の空きパーティション。 あとはメインユーザのアカウント名&パスを決定、設定項目はこの程度。 Ubuntuではrootユーザのパスワードは設定しない模様? 自分1人でしか使わないので自動ログイン設定で。 但しその場合、起動時にはパス入力求めないくせに、スクリーンセーバ後の復帰画面で 要パス入力がデフォになってて不思議(なので後で切る)。 普通にDHCPからIP取得して、この状態で既にネット利用可能。 ちなみに無線LANは使わずに有線LANで運用。 無線LANはWPAキーなどを設定すれば一応動くものの、妙に不安定?にて 何時の間にか途切れて再度WPAキー入力求められたり、と面倒だったので。 ■OS更新 システム-システム管理-アップデートマネージャ、より 取り敢えず表示されているアップデートは当てまくっておく。 その後のアップデートについては「通知のみ」として、強いて自動適用はしない。 (勝手にリブートされても困るので!) このOS更新をしている間は遠隔操作が不安定になる様子? (1クリックが多重クリック扱いになったり…) なので、後述の遠隔操作設定よりは先に実機でOS更新をしておいた方が無難。 ■初期設定〜遠隔操作まで システム-設定-ネットワーク接続、より 有線-Auto eth0を編集、IPv4設定より自動(DHCP)→手動 にてIPを固定化。 システム-設定-電源管理の設定、より ノートPCを閉じたときの動作をブランクスクリーンへ。 システム-設定-GNOMEスクリーンセーバー、より スクリーンセーバーを起動したら画面をロック、のチェックを外す。 システム-設定-リモートデスクトップ、より 共有を許可し、接続の毎回確認は外し、パスワード入力要求を設定。 これで他のPCからVNC-Viewerにて遠隔操作可能。 但し、この時点ではUbuntu起動後の最初のVNC接続のみログイン用キーリングを 実機側で要求されてしまうため、以下の対応。 アプリケーション-アクセサリ-パスワードと暗号鍵、より パスワードloginの右クリックからパスワードの変更、旧パスのみ入力し 新パスを空値設定(&安全でないストレージを使うを選択)。 ここまで設定すれば、実機は閉じたまま遠隔運用可能。 その後、画面上下のウインドウズバー?については、適当に好みで パネル類を追加しても良い。 ※CPU周波数モニタはATOM N280の周波数に正しく対応していないため、%表示で利用 VNC利用だとマウスカーソルが小さい黒点になってしまって使いにくいけど、 ちょろっと調べた限り改善策見当たらず(ので我慢)。 ■samba導入 システム-システム管理-Synapticパッケージマネージャ、より samba、system-config-samba をインストール。 (sambaで検索し、チェックして適用。以下同様) システム-システム管理-Samba、より 「追加」ボタンから共有フォルダの設定。 基本タブでは公開フォルダ&共有名を指定、書き込み可能&可視にチェック。 アクセスタブでは共有するユーザにチェックし、OK。 プリファレンス-Sambaユーザ、から共有するユーザに対し編集とし、 パスワードを再入力。 ※sambaパスワードはログインパスワードとは独立しているため、  こちらでも再度パスワードを設定しておく必要がある。 ■ftp&ssh導入 Synapticパッケージマネージャより vsftpd、openssh-server をインストール。 vsftpはデフォルトで書き込みが禁止&Uploadファイルが一般Read不可と なっているため、以下の対応。 sudo vi /etc/vsftpd.conf にて設定ファイルを編集 #write_enable=YES この行のコメント化を外し、 #local_umask=022 この行のコメント化も外しファイル保存 sudo restart vsftpd サービス再起動 取り敢えずこの時点で、ssh外部コンソール接続とftp接続は可能。 どちらも直でroot接続は不可。OS導入時に設定したユーザ&パスを用いる。 ssh接続は、sudo su(パスはログインユーザ側)にてroot化可能。 puttyの2007/08/06版(以降)にて、変換の文字コードをUTF-8としておけば 日本語表示も問題なし。※古いputtyでは全角文字が表示出来ない事もある。 ftp接続は、ffftpの最新版(1.97bなど)にて、ファイル名の文字コードを UTF-8と指定すれば全角ファイル名も含めて利用可能。 ■apache導入 Synapticパッケージマネージャ、より以下の導入。 apache2 apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common ※依存する〜〜を、と出たら全て導入 ◇設定ファイル類 /etc/apache2/apache2.conf apache設定ファイルの親(ここから他をinclude) /etc/apache2/httpd.conf 旧apache設定ファイル(中身は空) /etc/apache2/ports.conf ポート設定ファイル(listen 80 が入っている程度) /etc/apache2/conf.d/ 追加モジュール類の設定ファイル用置き場 及び、以下に細かな設定ファイル群が存在 /etc/apache2/mods-available モジュール類の設定ファイル /etc/apache2/sites-available バーチャルホスト毎の設定ファイル これらは以下のコマンドにてenable側リンクが修正され、有効無効を切り替える。 a2ensite サイトの有効 a2dissite サイトの無効 a2enmod モジュールの有効 a2dismod モジュールの無効 ここでSSI実行のために、以下を実施しておく。 sudo a2enmod include (201601 Apache2.4では sudo a2enmod cgi も必要) 以下の設定修正(sudo vi ファイル名、もしくは gksudo gedit ファイル名) ◇/etc/apache2/conf.d/security より(201601 /etc/apache2/conf-enabled/security.conf) ServerTokens Off (201601 Offは使えなくなった? Minimalで運用か) ServerSignature Off ◇/etc/apache2/mods-enabled/mime.conf より AddHandler cgi-script .cgi (コメント化を解除) ◇/etc/apache2/apache2.conf より LogFormat "%h %l %u %t \"%!414r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined ←!414 の追加 SetEnvIf Request_URI \.(mp3|mid|lzh|zip|pdf|flac) musiclog SetEnvIf Request_URI "\.(gif|jpg|png|ico|css)$" nolog SetEnvIf Remote_Addr 192.168. nolog !musiclog SetEnvIf RequestReferer bot\.htm nolog SetEnvIf Request_URI default \.ida nolog SetEnvIf Request_URI cmd \.exe nolog SetEnvIf Request_URI mod_ssl:error:HTTP-request nolog SetEnvIf Request_URI "NULL\.IDA" nolog SetEnvIf Request_URI "^/_mem_bin/" nolog SetEnvIf Request_URI "^/_vti_bin/" nolog SetEnvIf Request_URI "^/c/" nolog SetEnvIf Request_URI "^/d/" nolog SetEnvIf Request_URI "^/msadc/" nolog SetEnvIf Request_URI "^/MSADC/" nolog SetEnvIf Request_URI "^/scripts/" nolog ◇/etc/apache2/sites-available/default より(201601 apache2.confに移った模様) Options None AllowOverride None Order Deny,Allow Deny from all (→201601 apache2.4では後述) Options Includes FollowSymLinks ExecCGI XBitHack on AllowOverride All Order allow,deny Allow from all CustomLog /var/log/apache2/access.log combined env=!nolog CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/music_log.%Y%m%d 604800 540" combined env=musiclog (↑201601 apache2.4では後述) 設定変更後はapache2サービスの再起動 sudo /etc/init.d/apache2 restart ■webコンテンツ・ログ /var/www/ ドキュメントルート (201601 この下にhtmlフォルダが挟まってる?) /var/log/apache2/ 各種ログの配置場所 /var/www/webalizer アクセスログ解析結果 /var/www の書き込み権限を変更(ownerがrootのため手抜き設定) sudo chmod 777 /var/www sudo chmod 666 /var/www/index.html (その後、適当にリネーム) その後は/var/wwwにWEBコンテンツを移行。 Windows機を経由したりした場合、フォルダの権限が700(ownerのみアクセス可) となってしまっている事があるが、そのままだとフォルダ内の.htaccessの 検索が出来ずにエラーとなるため、グループ&otherの権限を変更 chmod 755 フォルダ名 (その他、通常のファイルは644、cgiは755、書き込みのあるファイルは766  一時的にファイルを作成するフォルダは777) /etc/logrotate.d/apache2 の記載の通り、/var/log/apache2/*.log ファイル群は 日次ローテートされる。※/etc/cron.daily/logrotate にて実行 世代数は、/etc/logrotate.conf の通り4世代。 尚、先のログ出力設定では、通常のこの4世代ログとは別に、env=musiclog として、 music_log.YYYYMMDD 形式でもDL状況抜粋ログを別途出力している。 こちらは永久保存。 ■webalizer ※後述の通り、実際はwebalizerは利用せず(201601でも同様) Synapticパッケージマネージャより webalizer をインストール。 レポート配置場所の権限変更(ownerがrootのため手抜き設定) sudo chmod 777 /var/www/webalizer 読み込み制限のために、/etc/apache2/conf.d の中に webalizer.conf を用意。 AuthName "Webalizer AREA" AuthType Basic AuthUserFile /etc/apache2/.htpasswd require user ここにユーザ名 satisfy any Order deny,allow Deny from all # Allow from 127.0.0.1 及び、 /etc/apache2 の下に .htpasswd を用意。 /usr/bin/htpasswd -c /etc/apache2/.htpasswd ここにユーザ名 その後にパスワード入力 (ここで一度apache2サービスを再起動) 予め、/var/lib/webalizer フォルダを作っておく 設定については、/etc/webalizer/webalizer.conf より LogFile /var/log/apache2/access.log HistoryName /var/lib/webalizer/webalizer.hist Incremental yes IncrementalName /var/lib/webalizer/webalizer.current HostName ホスト名(もしくはプライベートIP記載も可) DNSCache /var/lib/webalizer/dns_cache.db DNSChildren 10 Quiet yes TopURLs 500 TopReferrers 100 HideReferrer サイトURL/ HideReferrer Direct Request 手動実行する場合は以下。 sudo /usr/bin/webalizer -c /etc/webalizer/webalizer.conf 集計をやり直したくなった場合は、以下の2フォルダの全ファイルを削除 /var/lib/webalizer/ /var/www/webalizer/ /etc/cron.daily/webalizer にて日次集計される設定となっているが、 毎時集計したい場合は、/etc/cron.hourly にコピー(or ln)しておく。 (補足) ubuntuの環境変数LANGは、printenvで確認すると以下となっている。 LANG=ja_JP.UTF-8 この状態でwebalizerを集計すると、ubuntu10.04対応webalizerでは 表の項目名等を日本語表示する様に試みるが、その日本語対応がbugっている? らしく、部分的に文字化けしつつ他のhtmlタグを破損させ、結果的に表示が壊れる。 そこで、/etc/cron.hourly/webalizer について、処理の序盤に以下を追加。 export LANG=C ※と、ここまで記述しておきながら、どうもubuntu10.04とwebalizer2.01の 組み合わせでは2回目以降の更新が上手くいかず、ちょっと調べても イマイチ改善策が見当たらないので、awstatsに乗り換えマス… ■awstats Synapticパッケージマネージャより awstats をインストール。 読み込み制限のために、/etc/apache2/sites-available/default より (201601 apache2.confに移動した模様) Alias /awstats-icon/ /usr/share/awstats/icon/ Options None AllowOverride None Order allow,deny Allow from all (201601 conf-availables/serve-cgi-bin.conf で定義) AuthName "awstats AREA" AuthType Basic AuthUserFile /etc/apache2/.htpasswd require user ここにユーザ名 satisfy any AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order deny,allow Deny from all # Allow from 127.0.0.1 及び、 /etc/apache2 の下に .htpasswd を用意。 /usr/bin/htpasswd -c /etc/apache2/.htpasswd username (ここで一度apache2サービスを再起動) /etc/awstats/ 配下について、元のawstats.confをコピー。 例えば、awstats.conf → awstats.mysite.conf ここで「mysite」の部分が今後のconfig名となる。 awstats.mysite.confの修正 LogFile="/var/log/apache2/access.log" ※こちらはデフォルトのまま LogFormat=1 SiteDomain="mysite.com" SkipHosts="127.0.0.1 REGEX[^192\.168\.0]" 初回集計は、以下。 sudo perl /usr/lib/cgi-bin/awstats.pl -config=mysite -update 結果表示は、webブラウザより以下を開く http://mysite.com/cgi-bin/awstats.pl?config=mysite 自動実行のために、/etc/cron.d/awstats の修正。 (元) 0,10,20,30,40,50 * * * * www-data [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.conf -a -r /var/log/apache2/access.log ] && /usr/lib/cgi-bin/awstats.pl -config=awstats -update >/dev/null ↓(変更後)(201601 後述) 0,10,20,30,40,50 * * * * root [ -x /usr/lib/cgi-bin/awstats.pl ] && /usr/lib/cgi-bin/awstats.pl -config=mysite -update >/dev/null 蓄積データの保存場所は、/var/lib/awstats 、再集計したい場合はここをクリア。 設定カスタマイズとしては、awstats.mysite.conf の以下の辺りを修正。 MaxNbOfDownloadShown = 10 MaxNbOfPageShown = 10 MaxNbOfRefererShown = 10 MaxNbOfKeyphrasesShown = 10 MaxNbOfKeywordsShown = 10 ※http://ubusrv.no-ip.info/index.php?AWStats サイトの情報を  参考にさせて頂きました。感謝です。 ■おまけ ハードウェアモニタリングのために、以下の導入 lm-sensors sensors-applet (201601 Gnome以外の環境ではxsensorsなどで表示可) 起動時にhddtempデーモンの開始にはチェックを入れる リスンwするI/Fやポートはデフォルトのまま sudo sensors-detect より、質問にはyesと答えまくる (最後のみデフォルトがNoなのでYesに変更)(201601 ALLデフォで良い?) 一度ログオフしてログオン。 その後、パネルにHardware Sensors Monitorを追加。 ■2016年1月 ION-Atom機にubuntu14.04LTS 64bitを導入 標準状態で何故かスタートメニュー的なI/Fが存在しないため、Ubuntuソフトウェアセンターから ClassicMenu Indicatorなどを導入 システムツールの中に「ソフトウェアの更新」と「ソフトウェアとアップデート」の 類似機能が存在するが、前者は後者の中の3つ目のタブな模様。 システムツール-ネットワークツールからeth0への設定でIPv4の直指定。 しかし設定I/Fが分かりにくく、普通に設定しているだけでもエラーで跳ねられるので IP設定はGUIのは諦めて/etc/network/interfacesいじるべきっぽい 通常のターミナルはユーティリティの中の端末。 デスクトップ共有の設定がメニューから見付からないので検索で探す。 ユーザーがログインしていないとVNC接続出来ない様子なので 特定ユーザを自動ログイン設定しておくこと。 キーリング要求や画面ロックパスワード要求はなくなった模様。 opensshは「Secure shellクライアントおよびサーバ(メタパッケージ)」を入れる。 apacheはapache2 2.4.7-1ubuntu4.9を導入 追加アドオンはデフォのufwに加えて、apache2-utils も追加(rotatelogsのため) /etc/apache2/apache2.conf より 最終行にサーバ名追記 Servername abab.dip.jp ubuntu14.04LTSのapache2.4ではcgiモジュールがデフォルトで無効化されているので sudo a2enmod cgi でCGI有効化 apache2.4系では Order Allow,Deny Allow from all ではなく Require all granted に変わった模様。よって、apache2.confの記載は以下 Options Includes FollowSymLinks ExecCGI XBitHack on AllowOverride All Require all granted rotatelogsの位置が/usr/sbinから/usr/binに変更のため、apache2.confの記載は以下 CustomLog /var/log/apache2/access.log combined env=!nolog CustomLog "|/usr/bin/rotatelogs /var/log/apache2/music_log.%Y%m%d 604800 540" combined env=musiclog awstatsの自動実行 /etc/cron.d/awstats の修正は、既存をコメント化して 0,10,20,30,40,50 * * * * root /usr/lib/cgi-bin/awstats.pl -config=myTestServer -update > /dev/null awstatsのcgi-binへの設定については、apache2.config から conf-availables/serve-cgi-bin.conf に移行 CPU使用率が常に50〜70%台となり、sudo topで調べるとxorgが占有。 GPUドライバが汎用になっていて、nvidiaのドライバを調べると http://www.nvidia.co.jp/download/driverResults.aspx/95387/jp Linux 64bit 340.96にIONサポートの記載あり sudo apt-get install nvdia-340 で導入