初期インストール

ハードディスク2台に、RAID1 組んでインストール。
途中のサーバーはなにもインストールせずに終了。まずはともあれ、vimとsshをいれる。
$ sudo apt-get install vim ssh
でもって、ネットワークを固定アドレスに変更f
$ sudo vi /etc/network/interfaces

通常、LAN内のパソコンのIPアドレスは、ルーターによってその都度、IPアドレスが振られます。サーバーは、その場所を特定する必要が多いため、IPアドレスを固定に設定します。LAN内のIPアドレスは 192.168.99.・・・ という様になって、最後の数字が順番に振られます。他のパソコンと競合しないために、LAN内のパソコンなどの無線機器数+3~4程度の数字を設定したほうが良さそう。(最近無線機器が多いしね)

iface eth0 inet dhcp

ここを以下の様に直します。99 の部分は ご家庭のルーター設定に左右されます。また、一行めの最後の数字は同じルーター内にあるパソコンのそれぞれ振られる番号なので、パソコンの台数等により異なります。ルーターの設定等でご確認ね。

iface eth0 inet static
   address 192.168.99.11
   netmask 255.255.255.0
   gateway 192.168.99.1
   dns-nameservers 192.168.99.1   //ルーターでいいのじゃないかな??

ここの記述は、12.04からStatic(固定IP)の場合には、変わった模様。インターネットつながってるのに、apt-get できなくなって、慌てて調べたよ。。。 つづいて、ネットワーク再起動

$ sudo ifdown eth0
$ sudo ifup eth0
$ ifconfig

eth0 の inet addr:が 192.168.99.11 となっていたら、ssh でリモート接続できる様になるかな? 再起動しないとだめなときあった

$ ssh felix@192.168.99.11

の様にアクセスします。(サーバーからキーボードとモニターを外せます。)つないだら

$ sudo apt-get update
$ sudo apt-get upgrade

独自ドメインと内部DNS設定

ちょっと遠回しで、実感ないけど、ここで内部的にも外部的にもサーバー名が使えるのが、便利。ひとつは、外部からの接続のため。もうひとつは、内部設定の書き換えを極力なくすため。

 固定IP取得

通常、自分のグローバルアドレスは、プロバイダーによって書き換えられるので、変動してしまいます。それを固定的にしないと、自分のサーバーに外部から接続することは難しくなります。いろいろ方法はあるみたいですが、固定IP以外の方法は、制約が多くて、いずれにしてもお金はかかることが多くて、あまり成功していないです。ダイナミックDNS、MyIPなどがその他の方法になると思います。以下では固定IPを取得した後の話。固定IPは、1000円/月 くらいでなんとかなると思います。

独自ドメイン ー 外部から接続 

私は、FC2ドメインAWSでドメインを取得しています。安くなったしね。年間1000円/月 程度ですね。ネームサーバー設定がわかりやすいところがよいと思います。独自ドメインの管理画面から、すくなくとも 以下のあたりを設定したらOK。 (以下は,FC2ドメインの [DNS設定]⇒[DNSの種類]=代行DNS としたときの [DNSレコードの設定]の画面

felix-labo.dns.png

これで、外部から、felix-labo.org とすれば、121.101.72.115 に接続してくれそうだけど、接続されるのは、gatewayであるルーター(たいていは外部からの接続はブロックされるけど)。バッファローのAirStationなら、DMZ設定があるから、それをサーバーの内部IPアドレス(192.168.99.11)に設定するだけ

AirStation_01.png

これで、OK。説明順序が逆かもだけど まず felix-labo.org と打たれたら どこなの?と、.orgを管理しているところに、ドメイン管理しているところ(FC2)経由で聞きに行く。そこから、felix-labo.orgってば、121.101.72.115だよって教えてもらって、そこにアクセスするってのが仕組みであって、ネームサーバー(DNSサーバー)の役割ってこと。これがうまく行けば、
ssh felix@felix-labo.org
として、接続できるようになる。DMS設定で、LAN内のIP設定しているので、外部からの接続では、まずDMZのIPに接続される。うまく行っていない時には、ubuntuだと、ネットワークツールで、pingしてみ るとか traceroute してみるとどこでなにしちゃってるのかわかる。

内部DNS設定 内部から接続

じゃ、同じLAN内にあるサーバーに対して、192.168.99.11接続しなくてもOKなのか?っていうと、そうならないのがほんま難しいところ。LAN内から、felix-labo.orgを聞いた場合、202.79.156.16 だよって言われる。これをたどると、192.168.99.11に来る前に、192.168.99.1(ルーター)にたどり着いてしまう。この時点で内部から、ブラウザなどで felix-labo.orgって打つと、ルーターのパスワード聞かれちゃうのはそういうわけ。これを回避するには、もし、内部から、felix-labo.orgを聞いたら、192.168.99.11を指定してもらうネームサーバー(DNSサーバー)が必要になる。このDNSサーバーを、192.168.99.11に設置してしまう。まずは、bindというネームサーバーパッケージのインストール。以下ココあたりが詳しい
$ sudo apt-get install bind9
つづいて、経路の親元の named.confを編集
$ sudo vi /etc/bind/named.conf
以下のように編集(9行目あたりから)
include "/etc/bind/named.conf.options";
//include "/etc/bind/named.conf.local";            //コメント化 実質空っぽのファイル下で切り分けるので使わない
//include "/etc/bind/named.conf.default-zones";   //コメント化

view "internal"{
       include "/etc/bind/named.conf.default-zones";
       include "/etc/bind/named.conf.internal";
};

view "external"{
       include "/etc/bind/named.conf.default-zones";
       include "/etc/bind/named.conf.external";
};
やってるのは、このDNSサーバーへ外部から接続した場合と、LAN内から接続されたときの場合分け。上記の通り、たいていの独自ドメイン、無料ドメインには、ネームサーバー設定がついているから、外部からのこのDNSサーバーに接続することはないのだけど、たまに、ネームサーバー設定がついていないことがある(FC2だと、.jpとか)。 こんな場合には、このサーバーのネームサーバーや他のネームサーバーを設定してあげる必要がある。このネームサーバーを外から指定されたときには、viw "external"が読み込まれることになって、このサーバーのグローバルIPを教えてあげることになる。自分を教えるDNSサーバーってことね。2回このサーバーに問い合わせられることになる。この時点では、named.conf.externalには何も記入しない。

続いて、named.conf.internal を新規作成して、以下を追加
zone "felix-labo.org"{
      type master;
      file "/etc/bind/db.felix-labo.org-priv";
};
zone "99.168.192.in-addr.arpa"{
      type master;
      file "/etc/bind/db.99.168.192";
};
これは、内部でfelix-labo.orgと呼ばれた時のネームサーバーファイルとその逆引き 192.168.99.***って感じのときね

お次は、ここで指定している db.felix-labo.org-priv と db.99.168.192 2つのネームサーバーファイルを作っていきます。
$ sudo vi /etc/bind/db.felix-labo.org-priv
;BIND data file for felix-labo.org domain
;
$TTL    600
@       IN      SOA     gw.felix-labo.org        root.gw.felix-labo.org. (
                      16062901  ;Serial
                      1800    ;Refresh
                      900     ;Retry
                      604800  ;Expire
                      1200 )  ;Negative Cache TTL
      IN      NS      gw
;Slave(If you need)
;       IN      NS      other.net.jp.
;Mail exchange
      IN      MX      10 mail
;Localhost
localhost IN    A       127.0.0.1
;
;Host entry
;
@       IN      A       192.168.99.11
gw      IN      A       192.168.99.11
;Alias
www     IN      CNAME   gw
mail    IN      A       192.168.99.11
最後は
$ sudo vi /etc/bind/db.99.168.192
以下のように
; BIND data file for 192.168.99 network
;
$TTL    86400
@       IN      SOA     dns.felix-labo.org       root.dns.felix-labo.org. (
                      3       ;Serial
                      1800    ;Refresh
                      900     ;ReTry
                      604800  ;Expire
                      1200 )  ;Negative Cache TTL
      IN      NS      dns
;Slave(If you need)
;       IN      NS      other.net.jp
;Host entry
;
1       IN      PTR     dns.felix-labo.org
;1      IN      A       192.168.99.11
これでOK.再起動
$ sudo /etc/init.d/bind9 restart
ルーターの設定は、以下のようにDNSに設定してやればいい感じ

AirStation_02.png

公開鍵(Public Key)と秘密鍵(Private Key)による認証

いろいろと、ややこしくて いままでやってこなかったけど、挑戦。結局は、以下のようなことであるはず 

sshoverview.jpg  

なのだけど、いろいろと名前とかファイル名とか出てくるから、ほんまこんがらがる。このメリットは、パスワードによるSSHのログインをさせない代わりに、publick_key ファイルを保持しているPCからのみログインを認めることにあるので、そこまで確認したい。

Ubuntu Client側から操作

公開鍵(Public Key)と秘密鍵(Private Key)をペアで作成する。Server側、Client側どちらからやってもOKとのこと。Client側からやってみる。
$ cd /home/felix/
$ ssh ssh-keygen -t rsa
とすると
Generating public/private rsa key pair.
Enter file in which to save the key (/home/felix/.ssh/id_rsa):    //そのままEnter
Enter passphrase (empty for no passphrase):            //パスフレーズ入力。Userのパスワードと違ってて良い。
Enter same passphrase again:              //パスフレーズ確認再入力
Your identification has been saved in /home/felix/.ssh/id_rsa.       //これが秘密鍵(Private Key)
Your public key has been saved in /home/felix/.ssh/id_rsa.pub.      //これが公開鍵(Publick Key)
The key fingerprint is: ・・・・・・・
と出てくる。
$ ls ./.ssh/
とすれば、id_rsa.pub(公開鍵) と id_rsa.pub(秘密鍵)の2つができていることがわかる。この名前を変える。
$ cd ./.ssh/
$ mv id_rsa.pub publick_key
$ mv id_rsa felix-labo_private_key
どちらも普通のやり方とは、違うやり方。公開鍵(Public Key)と秘密鍵(Private Key)に合わせて、また、このClientから、他のServerへログインすることも考えて名前をつけています。秘密鍵(Private Key)のこの部分(名前変更した部分・他のServerとの区別)は、Client側のSSHを設定しなくてはなりません。
$ sudo vi /etc/ssh/ssh_config
sshd_config ではない注意。以下を末尾に追加
# 192.168.99.11
Host 192.168.99.11
       User felix
       Port 22
       Hostname 192.168.99.11
       IdentityFile ~/.ssh/felix-labo_private_key
どこに誰で入るか、どの鍵使うかって感じで気持ち良い。
サーバーへ公開鍵を送る
$ cd /home/felix/
$ scp ./.ssh/publick_key felix@192.168.99.11:/home/felix/   # ./.ssh ができているなら、そっちに入れたほうがいい
これで、client側は終わり。clientがわにpublic_keyいらないので、消してもOK
$ rm ./.ssh/publick_key

サーバー

サーバー側は、Public_Key が設置されているので、そのパーミッションの設定をする。サーバーにログインして
$ mkdir ./.ssh
$ chmod 700 ./.ssh
$ mv ./public_key ./.ssh/           #すでに ./.sshにはいっているなら、いらない
$ chmod 600 ./.ssh/publick_key
$ cd /home/felix
つづいて、sshd_conf ファイルの設定
$ sudo vi /etc/ssh/sshd_config
で以下を編集
#34行目付近
AuthorizedKeysFile      %h/.ssh/public_key

#48行目付近
ChallengeResponseAuthentication no

#51行目付近
PasswordAuthentication no
これで再起動
$ sudo service ssh restart
SSHの再起動は、サーバーから切断されないありがた仕様。Clientからのテストをすることになるけど、ログインできない時には、再度サーバーいじらなくちゃいけない時があるから、もうひとつ端末立ち上げてテストするのがお利口。SSHログインで、Passwordではなく、private_keyファイルの、passpharase を聞いてきたら成功。パーミッション設定とか、sshd_confing あたりでつまづく。

Windwosからのログイン putty

ココあたりでできる

AMPP設定

Apacheを実行する最低限の権限を有するユーザーを設定
$ sudo adduser flabo
[password]
(名前、部屋番号、等を聴聞してきますので必要に応じて入力します。)
つづいて パッケージインストール pukiwiki Advanceに必要な curl mecab のインストールも入っています。
$ sudo apt-get install php5 libapache2-mod-php5  mysql-server php5-mysql php5-sqlite phpmyadmin postgresql php5-pgsql phppgadmin php5-dev php5-curl g++ make mecab mecab-jumandic-utf8 libmecab-dev php-pear
途中、Mysqlのrootパスワードを設定など。でもって php-mecab のインストール
$ sudo pear channel-discover pecl.opendogs.org
$ sudo pear remote-list -c opendogs
$ sudo pear install opendogs/mecab-beta
最後のコマンドで途中 specify pathname to mecab-config [no] : がでるけどここは Enter でいいらしい。mecab.iso 設置しろとでるね
$ sudo vi /etc/php5/apache2/conf.d/mecab.ini
新しいファイルができるので、
extension=mecab.so
でOK おきまりの再起動
$ sudo /etc/init.d/apache2 restart
/var/www/html に test.php でも設置して
<?php
 phpinfo();
?>
felix-labo.org/test.php で確認 curlもmecabも動いてるね。

Apacheの設定

ウェブページを設置する /virtual 以下のディレクトリを作成します。この /virtual は、最終的にはいくつかのウェブページの バーチャルホストになることを想定しています。
sudo mkdir /virtual
sudo mkdir /virtual/www
sudo mkdir /virtual/log
sudo mkdir /virtual/log/apache2
sudo chown -R flabo:flabo /virtual/*
wwwがapacheのルートになるので、flabo にオーナー変更。また、log は Apacheのログディレクトリになる
sudo vi /etc/apache2/envvars
15行目あたり
export APACHE_RUN_USER=flabo
export APACHE_RUN_GROUP=flabo
で22行目あたりを
export APACHE_LOG_DIR=/virtual/log/apache2$SUFFIX
てな感じに書き直し。 後ろの $SUFFIX  はなんのこっちゃ不明w
$ sudo vi /etc/apache2/conf-available/flabo.conf
あたらしいファイルができるので
<Virtualhost *:80>
       ServerName     felix-labo.org
       #UseCanonicalName       On    //公開するまではコメント化
       DocumentRoot /virtual/www/felix-labo.org
       <Directory /virtual/www/felix-labo.org/>
               Options FollowSymLinks MultiViews
               AllowOverride None
               Require all granted
       </Directory>
</Virtualhost>
公開する間では最後の行は コメント化がいいかも、で。。。Apache2.4対応でこれを登録
$ sudo a2enconf flabo
$ sudo /etc/init.d/apache2 restart
テストしてみます。
$ su - flabo
$ cd /virtual/www
$ mkdir ./felix-labo.org
$ vi ./felix-labo.org/index.html
で適当に・・・
Hello felix-labo!
とでも打って
$ sudo /etc/init.d/apache2 restart
これで
http://felix-labo.org
などでアクセスするとちゃんと表示されると思います。

Could not reliably determine the server's fully qualified domain name のエラーが...

もうこのエラーは出ないね。てか このファイルがDefaultで作られてるね
ホストに明示的にホスト名を記入しないとだめらしい。×××.×× みたいなやつ
$ sudo vi /etc/hosts
で、
127.0.0.1       localhost
127.0.1.1       felix-labo.org
こんな風にしとくとOK

PHP設定

php.iniの内容を書き換え 5.5で始めての設定なので、あやしいw
sudo vi /etc/php5/apache2/php.ini
書き換える内容は以下な感じ
(396行目付近)
memory_limit = -1
(683行目付近)
default_charset = "UTF-8"
(869行目付近)
date.timezone ="Asia/Tokyo"   //timezone指定しないとエラーがでるときあり。
(1657行目付近)
mbstring.language = Japanese
(1167行目付近)
mbstring.internal_encoding = UTF-8
(1690行目付近)
mbstring.substitute_character = none
反映するにはApacheリスタート
$ sudo /etc/init.d/apache2 restart
Cliにもコピー リンクは、リンク先から操作
$ cd /etc/php5/cli/
$ sudo mv ./php.ini ./php.ini.org
$ sudo ln -s /etc/php5/apache2/php.ini php.ini

MySQL設定

実行ユーザーの設定を行います。まずはルートユーザーのパスワード設定から
$ mysql -u root -p
[password]
続いて、Webコンテンツ用のデータベース実行ユーザーを設定。
mysql> create database webkintai;
(他にも、作りたいDBがあれば、ここでつくります。)
mysql> create user flabo@localhost identified by 'pppppppq';
mysql> grant usage on *.* to flabo@localhost;
mysql> grant all on webkintai.* to flabo@localhost;
(他に作ったDBで権限をもたせたければ、ここで設定します。)
mysql> quit
簡単に解説をすると一行目でウェブページ用のデータベースを作成し、二行目で実行ユーザーを作ります。三行目で作ったユーザーに対するすべての権限を剥奪(usage)します。その後、Webkintai に対してだけすべての権限を付与します。
以下も必要なくなっている様子
次に文字化け防止用に、my.cnf の設定を変更します。
$ sudo vi /etc/mysql/my.cnf
[mysqld]の最後に以下の2行を追加します。
character-set-server=utf8
skip-character-set-client-handshake
再起動して設定を有効にします
$ sudo /etc/init.d/mysql restart

phpmyadmin の設定

apt-get でいけるから なんにもするひつよう無しだったけど。。一部 古いApache記述があるね 
$ sudo vi /etc/apache2/conf-available/phpmyadmin.conf
で最後の方を書き換え
<Directory /usr/share/phpmyadmin/libraries>
   #Order Deny,Allow
   #Deny from All
   Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
   #Order Deny,Allow
   #Deny from All
   Require all denied
</Directory>
もうconfは登録されているので
$ sudo /etc/init.d/apache2 restart
するだけ

リンクテーブルを処理するための追加機能を有効化

$ cd /usr/share/doc/phpmyadmin/examples/
$ sudo zcat create_tables.sql.gz>/home/felix/create_tables.sql
$ cd /home/felix/
$ mysql -uroot -p < ./create_tables.sql
(mysqlのパスワード)
$ mysql -uroot -p
(mysqlのパスワード)

mysql で

grant all on phpmyadmin.* to flabo@localhost;
quit

続いて、config-db.php を編集

$ sudo vi /etc/phpmyadmin/config-db.php

 (13行目あたりから)

$dbuser='flabo';
$dbpass='pqqqqqqqqqq';

てな感じで、このファイルでuserとパスワードを保存しておくみたい。

$ sudo vi /etc/phpmyadmin/config.inc.php

以下のように編集 110行目あたりから、ユーザー情報更新して、コメント化して、最後の二行は追加

/* Optional: User for advanced features */
$cfg['Servers'][$i]['controluser'] = $dbuser;
$cfg['Servers'][$i]['controlpass'] = $dbpass;
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';
$cfg['Servers'][$i]['recent'] = 'pma_recent';
/* Uncomment the following to enable logging in to passwordless accounts,
 * after taking note of the associated security risks. */
$cfg['Servers'][$i]['AllowNoPassword'] = TRUE;

最後の行に以下を追加

$cfg['blowfish_secret'] = 'hoge-hoge';

 こんどはなんだよ メクリプトって!

phpmyadmin のエラーには、ほんま時間くってるわ。mcrypt は、おまえが悪いのじゃないのだろうけどw php5 のモジュールに自動で登録されないエラー?らしいよ
$ cd /etc/php5/apache2/conf.d/
$ sudo ln -s /etc/php5/mods-available/mcrypt.ini 20-mcrypt.ini
$ cd ../../cli/conf.d/
$ sudo ln -s /etc/php5/mods-available/mcrypt.ini 20-mcrypt.ini

phppgadmin の設定

ユーザーを追加します。phppgadmin は、postgreSQLの初期ユーザーpostgresを初期状態でログインできない様にしています。このポリシーに合わせて新たなスーパーユーザーを作成したいと思います。
$ sudo passwd postgres
(ここでパスワードを設定します。)
$ su - postgres
(以下で一般的に使用するユーザーを作ります。username を任意の名前にしてください)
postgres@mv1c3e:~$ createuser -P username
(ここでパスワード設定と権限設定をします。特にこだわらなければ、Y でよいと思います。)
$ logout
phpmyadminが、初期設定がフリーアクセスだったのに対し、phppgadminは初期設定で、自分自身しかアクセスできない様になっています。リモートアクセスは出きるようにしたいので、
$ sudo vi /etc/apache2/conf.d/phppgadmin
で、8行目付近を以下の様に変更...2.4対応でねww
# order deny,allow
# deny from all
# allow from 127.0.0.0/255.0.0.0 ::1/128
# allow from all
Require ip 192.168.99
postgresqlはほとんどつかっていないので、LAN内アクセスで充分なので、この書き方
で、ここでもApache2.4の設定...
$ cd /etc/apache2
$ sudo cp -r ./conf.d/phppgadmin ./conf-available/phppgadmin.conf
$ sudo a2enconf phppgadmin
$ sudo /etc/init.d/apache2 restart
/192.168.99.2/phppgadmin の様にアクセスできる様になります。

時刻あわせ ntp

$ sudo apt-get install ntp
$ sudo vi /etc/ntp.conf
で、 デフォルトのサーバーを日本のサーバーに変更
(18行目付近)
# more information.
#server 0.ubuntu.pool.ntp.org   //コメント化
#server 1.ubuntu.pool.ntp.org  //コメント化
#server 2.ubuntu.pool.ntp.org  //コメント化
#server 3.ubuntu.pool.ntp.org  //コメント化
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

# Use Ubuntu's ntp server as a fallback.
#server ntp.ubuntu.com  //コメント化
リスタート
$ sudo /etc/init.d/ntp restart
時刻合わせ
$ ntpq -p
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
ntp1.jst.mfeed. 133.243.236.17   2 u   11   64    1   10.386   -6.941   0.001
ntp2.jst.mfeed. 172.29.1.50      2 u   10   64    1   10.054   -6.770   0.001
ntp3.jst.mfeed. 172.29.3.60      2 u    9   64    1   10.096   -6.495   0.001

今回はあったぞw

CPU温度調査 sensors

$ sudo apt-get install lm-sensors
で、自動?設定
$ sudo sensors-detect
ひたすら ENTER ENTER って感じ進みます。
$ sensors
と打つと。。。 だめだなぁ。。。 なにか変わったみたい

なんかエラーが...

Your current Hardware Enablement Stack (HWE) is going out of support
on 07/08/2014.  After this date security updates for critical parts (kernel
and graphics stack) of your system will no longer be available.

For more information, please see:
http://wiki.ubuntu.com/1204_HWE_EOL

To upgrade to a supported (or longer supported) configuration:

Upgrade from Ubuntu 12.04 LTS to Ubuntu 14.04 LTS by running:
sudo do-release-upgrade

Install a newer HWE version by running:
sudo  apt-get install linux-generic-lts-trusty linux-image-generic-lts-trusty

and reboot your system.

あれまぁ。。。

sudo  apt-get install linux-generic-lts-trusty linux-image-generic-lts-trusty

やるか、14.04に変えろってことなんだろうけど、なんどやっても、上手くいかない。よく見ると、 /boot のディスクの容量がないってことで... RAID 組んでる関係で、/boot は 100Mしかとってなくて... しゃーないから、RAID組みなおして、1Gにして上手くいった

その他