サーバ構築





[-] 1. Redmine

[-] 1.1. 参照

[-] 2. 2017/05〜

Ubuntu 12.04 のサポート終了に伴い OS をアップグレード しようとしたのが悲劇の始まりだったw

  1. Ubuntu 12.04 のサポート終了に伴い OS をアップグレードしようとしたところ 失敗に終わる。 種々の設定(/etc/*)辺りをいろいろ変えていたからと予想。 ま、ここまでは想定内。
  2. コールドインストールを試みるもここで何と Disk I/O エラー。
  3. 新しく HDD を買い、再びコールドインストールを試みる。 OSインストールまでは問題ないのだけど、そこからの boot で なぜか画面が真っ黒に。 色々(BIOSアップグレード, (32bit, 64bit) x (12.04, 14.04, 16.04, 17.04), Debian, Debian GUI)試すも、現象は同じ。 ここまでで1週間w。 結論から言うと、HDD・グラフィックボード・LAN辺りのトラブルだったかと。
  4. 諦めて新ハード購入。
    Shuttle XS36V5 (Celeron N3050):¥18,981
    メモリ 8G(SODIMM DDR3L-1600):¥ 6,769
    HDD TOSHIBA 2.5" SATA 9.5mm-height 1TB(MQ01ABD100):¥ 5,980
    ここに Ubuntu 16.04 をインストールするとサクッと動作。 先週一週間の苦労が無駄に…orz

[-] 3. 〜2017/05

[-] 3.1. H/W

当面はこれで十分だろう:

  • Shuttle XS35V3 (15,800円)
    • ファンレス
    • Atom D2700 dual core
  • 4G RAM(2,280円。安っ!)
  • 500G HDD (5,370円)
  • UPS: Omron BY35S

[-] 3.2. OS install

Ubuntu server 12.04 LTS 32bit を入れる。

  1. http://www.ubuntu.com/ から Ubuntu server 12.04 LTS 32bit をダウンロード。 (32bit なのは、H/W が 32bit しか対応してないため)。
  2. USBメモリにコピー
  3. USBメモリを挿して起動
  4. 原則、画面に沿って進める。
    • "インターフェイスが検出されませんでした" と出る。 1時間ほどハマったが、結論としては、このまま進め、 後で再設定すれば ok だった(後述)。
  5. ソフトウェアの選択。とりあえず選んだのは以下:
    • Open SSH Server
  6. keyboard 変更
    1. /etc/default/keyboard: #XKBMODEL="a4techhKB21"
      XKBMODEL="pc105"
      #XKBLAYOUT="jp"
      XKBLAYOUT="us"
    2. コマンド実行:
      $ sudo dpkg-reconfigure console-setup
  7. インストール後、下記でネットワーク動いた:
    1. /etc/network/interfaces に下記を追加:
      auto eth0
      iface eth0 inet dhcp
    2. 再起動
      $ sudo /etc/init.d/networking restart
  8. 追加パッケージ
    1. apt-get install の前に以下をしないと始まらない:
      $ suto apt-get update
      $ suto apt-get upgrade
      /etc/apt/sources.list は既に jp が指定されていた。
    2. 追加パッケージ:
      lv
  9. /etc を git で管理
  10. sshd のセキュリティ強化
    PermitRootLogin:no
    PasswordAuthentication:no
  11. /etc/default/bootlogd の BOOTLOGD_ENABLE を Yes にする。 /var/log/boot に残るようになる。

[-] 3.3. ruby install

[-] 3.4. DNS 設定

  1. ドメイン設定 > ネームサーバの設定 > レンタルDNSレコード設定
    • wellstech.jp TYPE A

[-] 3.5. ルータ設定

グローバルIP からのアクセスを、サーバに転送するよう、ルータの設定を行う。 サーバはローカルの固定IP 192.168.1.200 とする。

IPport
192.168.1.20022(ssh)
192.168.1.20080(http)
192.168.1.200443(https)

  1. http://ntt.setup/ (http://192.168.1.1)にアクセス。
  2. 認証。パスワード入力。
  3. 詳細設定 > 静的NAT設定
    エントリ番号:1
    優先順位:1
    接続インタフェース名:セッション2(i-revo)
    宛先IPアドレス:192.168.1.200
    変換対象IPアドレス:自分のWAN側IPアドレス
    変換対象プロトコル:TCPとUDP両方
    変換対象ポート:80-80
    エントリ番号:2
    優先順位:2
    接続インタフェース名:セッション2(i-revo)
    宛先IPアドレス:192.168.1.200
    変換対象IPアドレス:自分のWAN側IPアドレス
    変換対象プロトコル:TCPとUDP両方
    変換対象ポート:443-443
    エントリ番号:3
    優先順位:3
    接続インタフェース名:セッション2(i-revo)
    宛先IPアドレス:192.168.1.200
    変換対象IPアドレス:自分のWAN側IPアドレス
    変換対象プロトコル:TCPとUDP両方
    変換対象ポート:22-22
    エントリ番号:4
    優先順位:4
    接続インタフェース名:メインセッション(ISP1)
    宛先IPアドレス:192.168.1.200
    変換対象IPアドレス:自分のWAN側IPアドレス
    変換対象プロトコル:TCPとUDP両方
    変換対象ポート:22-22
    エントリ番号:5
    優先順位:5
    接続インタフェース名:セッション2(i-revo)
    宛先IPアドレス:192.168.1.200
    変換対象IPアドレス:自分のWAN側IPアドレス
    変換対象プロトコル:TCP
    変換対象ポート:25(smtp)

[-] 3.5.1. トラブルシュート

[-] 3.5.1.1. 現象

(2012/07/12) 突然 LAN内でネットが使えなくなる現象がだいたい1回/日の割合で4回発生した。 時間は不定期。サーバにもルータにもログは残っていない。

[-] 3.5.1.2. 対応

マルチセッションにしてからおかしくなったと思う。 取り急ぎ、固定IP側のセッション1つにして運用してみる。

[-] 3.5.1.3. 余談
  • ルータ PR-S300SE の PPPランプが橙色から緑に戻った。
    • これはルータの仕様。マルチセッションの場合橙色になる。
  • 従来のセッションを削除する際、パスワードを残しておきたかった。 管理画面のソースを見ても、tcpdump してもパスワードが分からない。 どうやっているのか、分からなかった…。

[-] 3.5.2. TODO

  • ルータの DHCP で 200 をリース対象としないよう設定する必要があるが まだやってない。

[-] 3.6. Apache

  1. SSI
    $ sudo a2enmod include
    $ sudo service apache2 restart
  2. Juli setup /etc/apache2/sites-available に下記を追加:
    #--------------------------------------------------------
    # juli setup
    #--------------------------------------------------------
    
      Options +Includes -Indexes -FollowSymLinks
      DirectoryIndex index.html index.shtml
    

[-] 3.7. 固定IP化

やはり固定IPが良いと判断した。理由は、

  • DDNS のアップデートはお名前.com に対して linux からやるツールは DiCE linux版(binaryのみ)しかなく、後々使えなくなることが不安。
  • i-revo から500円/月、というのがあった。
  1. i-revo に契約
  2. 与えられたアカウントをルータに登録
    • http://ntt.setup でルータに新しいセッションとして i-revo を設定。
  3. /etc/network/interfaces の eth0 の項を下記とする (LAN内 192.168.1.200 に固定としている):
    auto eth0
    iface eth0 inet static
    address  192.168.1.200
    netmask  255.255.255.0
    gateway  192.168.1.1
    dns-nameservers 192.168.1.1
    注: 'dns-nameservers' のエントリーがないと、reboot時に /etc/resolv.conf が空になり、dns が引けなくなっていた。

[-] 3.7.1. 旧情報

(この節古い) /etc/resolv.conf が動的 (/var/resolvconf/resolv.conf への symlink)なので 変更。

$ sudo apt-get remove isc-dhcp-client

[-] 3.7.2. http://グローバルIP するとルータ画面が表示される

LAN内部から http://グローバルIP にアクセスすると、なぜかルータ管理画面が 表示される。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1350231438 によると、ルータの機種によるようだ。 今使用しているのは PR-S300SE (住友電工製?)

[-] 3.7.2.1. DNSを LAN 内に立てる

LAN内に DNS を立て、LAN内ではサーバはローカルIP 192.168.1.200 となるようにすることで対応してみる。

  1. bind9 のインストール&設定
    1. install
      $ sudo apt-get install bind9
    2. /etc/bind/named.conf.local
      zone "wellstech.jp"         { type master; file "/etc/bind/wellstech.jp.zone"; };
      zone "168.192.in-addr.arpa" { type master; file "/etc/bind/wellstech.jp.rev";  };
    3. 正引き /etc/bind/wellstech.jp.zone
      $TTL    604800
      @       IN      SOA     wellstech.jp. root.wellstech.jp. (
                                    2         ; Serial
                               604800         ; Refresh
                                86400         ; Retry
                              2419200         ; Expire
                               604800 )       ; Negative Cache TTL
      ;
      @       IN      NS      wellstech.jp.
      @       IN      A       192.168.1.200
    4. 逆引き /etc/bind/wellstech.jp.rev
      $TTL    604800
      @       IN      SOA     wellstech.jp. root.wellstech.jp. (
                                    2         ; Serial
                               604800         ; Refresh
                                86400         ; Retry
                              2419200         ; Expire
                               604800 )       ; Negative Cache TTL
      ;
      @       IN      NS      wellstech.jp.
      200 IN PTR wellstech.jp.
    5. 検証
      $ cd /etc/bind/
      $ sudo named-checkzone wellstech.jp wellstech.jp.zone
      zone wellstech.jp/IN: loaded serial 2
      OK
  2. 自前の DNS を優先するように /etc/resolv.conf に指定したいが、 Ubuntu では resolvconf(8) 経由でこの設定ファイルが上書きされる。 そのソースとなるのが /etc/network/interfaces の dns-nameservers エントリ。ここに複数の IP を空白区切りで指定できるので、 /etc/init.d/networking restart 後は /etc/resolv.conf に2行の nameserver が並ぶはず…がそうならない。reboot してみても駄目。 ググッても分からないので、とりあえず /etc/resolvconf/resolv.conf.d/head を下記のようにして、自前 DNS を優先するようにする:
    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by
    # resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 127.0.0.1
    これで /etc/init.d/networking restart すると、/etc/resolv.conf は意図したようになった:
    nameserver 127.0.0.1
    nameserver 192.168.1.1
  3. 検証
    1. LAN内ではサーバはローカルアドレスとなる:
      $ nslookup wellstech.jp
        :
      Name:   wellstech.jp
      Address: 192.168.1.200
    2. LAN内からグローバルIPも引ける:
      $ nslookup www.yahoo.co.jp
        :
    3. LAN外からはグローバルIPが引ける:
      $ nslookup wellstech.jp
        :
      Name:   wellstech.jp
      Address: 124.41.84.125

参考:

[-] 3.7.2.2. 旧情報

/etc/hosts に書き込み、LAN 内・外に移動のたびに編集することで 逃げることにしていた時期もあった…。

[-] 3.7.3. つながらない

外部から wget http://wellstech.jp してもアクセスできない。

1時間ほどハマっていたが、結論としては、 ルータ管理画面の 基本設定 > 接続先設定 > 接続ルール設定 > セッション2(i-revo用)に、下記をセットすることでアクセスできるようになった:

接続先選択:セッション2(i-revo)
宛先ドメイン名:(空欄)
宛先IPアドレス:*
送信元IPアドレス:*
プロトコル:*

つまり、管理画面の説明にもあるように、「条件」(「接続ルール設定」 を指すようだ)で任意のIPからのアクセスに対してセッション2(i-revo)を 優先するようにしたわけだ。

なお、宛先IPアドレスを 192.168.1.200(LAN内サーバIPアドレス)や 124.41.84.125(i-revoで取得した固定IP)にするとアクセスできない(why?)。

[-] 3.7.3.1. 旧情報

(試行錯誤中のメモ。今となっては不要。)

外部から wget http://wellstech.jp すると、ルータ管理画面の 情報 > セキュリティログ に、以下のように破棄されている:

2012/07/04 00:13:12   124.255.167.***/36390   192.168.1.200/80    TCP 廃棄[SPI]

124.255.167.*** は送信元のIP

[-] 3.8. メール

  1. "sudo apt-get install postfix"
    • "インターネットサイト" を選択
    • システムメール名:: wellstech.jp

[-] 3.8.1. 送信

mailutils をインストール。mysql-common に依存しているのが気に入らない。

[-] 3.9. UPS

ノートPCで無停電サーバ運用、というのは甘いことが分かった ( http://mzex.wordpress.com/2008/05/16/%E3%83%8E%E3%83%BC%E3%83%88pc%E3%82%92%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%82%88%E3%81%8F%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1/ ) やや辛口^_^;

とは言え、UPS(というか鉛バッテリ)のメリットが分かったので、 ノート + 予備のリチウムバッテリ、という案はやめて UPS を導入することにしたのだった。

ざっと調べて、以下にしてみた:

  • Omron BY35S
    • 正弦波
    • Ubuntuにも使える。
[-] 3.9.0.1. SimpleShutdownSoftware v2.20 Linux版のインストール

Ubuntu用バイナリパッケージは提供されてないようだが、 ソースが提供されているため、再コンパイルすれば良い、と思っていたが これが甘かった。まず、コンパイルが通らない。

逆に、バイナリがそのままインストールできるのでそちらを使用する:

$ umask 002
$ cd Release
$ sudo bash ./install.sh
  :
(ライセンス条項が表示)
  :
Do you agree this license? [ y/n ] y
$ sudo /usr/lib/ssd/master/config.sh
[-] 3.9.0.2. 設定
  1. 通信ポートの指定:: Auto
    • default のまま
  2. USB通信モードの選択:: Libusb
    • default のまま
  3. 待機時間:: 60[sec]
    • default のまま
  4. 外部コマンドライン:: /opt/nike/sbin/ups_shutdown.sh
    • これは、管理者に通知メールを出し、シャットダウンするスクリプト。例:
      #!/bin/sh
      mail -s 'HOSTNAME UPS down' MY@MAIL.ADDRESS <<EOM
      HOSTNAME UPS down now...
      EOM
      sleep 5
      /sbin/shutdown -h 0
      (HOSTNAME, MY@MAIL.ADDRESS は適宜変える)
    • 外部コマンドで shutdown している理由: Omron提供の SimpleShutdown は、最後に /sbin/halt を呼んでいるが、 これだと poweroff とならず電源ランプが点いたままで、あまりうれしくない。 そこで、この段階で shutdown させている。
  5. 外部コマンド実行時間:: 60[sec]
    • default の 0 だとすぐに halt に移ってしまうため、1分の余裕を持たせている。
  6. シャットダウンに必要な時間:: 60[sec]
    • default は 180[sec]
    • この時間を過ぎて UPS が停止するようだ。
    • あまり長いのも何なのと、Ubuntu サーバの shutdown は今のところ割と早い (10秒以下)ので、60秒としている。60秒刻みなのでこれ以下は指定できない^^;
  7. メッセージの表示:: Disable
    • default のまま
  8. システム終了モードの選択:: 1(Shutdown)
    • default のまま

設定後、自動的にエージェントは起動しているようだ。 コマンドでのエージェントの起動/停止は以下:

$ sudo /usr/lib/ssd/master/AgentManager
[-] 3.9.0.3. 動作テスト
  1. 瞬断
    1. UPSのACプラグを抜き、また挿す(瞬断を模倣)
    2. UPSは瞬断を検知し警告音が鳴る。
    3. サーバは何事もなかったように稼働を続ける。
    4. /var/log/syslog には以下のようなログが:
      Jul  6 07:33:40 wtech SimpleShutdown[1606]: AC line failure!
      Jul  6 07:33:45 wtech SimpleShutdown[1606]: AC line failure recover.
    5. 時系列:
      Server: ---------------->
      UPS:    -- (瞬断) ------>
      
        _n
       ( l    _、_
        \ \ ( <_,` )
         ヽ___ ̄ ̄  )   グッジョブ!!
           /    /
  2. 停電
    1. UPSのACプラグを抜く(停電を模倣)
    2. UPSは停電を検知し警告音が鳴り続ける。
    3. 待機時間(前述)後に ups_shutdown.sh(前述)動作。 メール通知され、シャットダウン。
    4. 注意!
      • この後ですぐ UPS の電源を入れても、UPS停止プロセスは電源を 抜いた時からまだ続いているようで、「設定」節の「6. シャットダウンに必要な時間」 で設定した時間の後に一旦自動で UPS自体が停止される。
      • なので、サーバが無事シャットダウンされたからと言ってこの段階で サーバと UPS の電源を入れると、UPS停止でサーバまで電源断されるので要注意。
      • なお、UPS は停止後、その後自動的に インジケータ [--] → [FU] → [On] を経て UPS 稼動状態にはなる。
      • 時系列:
        Server: -----(shutdown)->  -ON-----------------------> サーバ停止
                           ↑                                     ↑
        UPS:    -->(停電)-->       -ON-----------------------> UPS停止
                            <---- シャットダウンに必要な時間 ---->
      • 要は、Server, UPS 共に、UPS停止後に ON する、ということ。
[-] 3.9.0.4. Files
/usr/lib/ssd/master/AgentManager:コマンドラインでの daemon の管理
/usr/lib/ssd/master/Shutdown.cfg:設定情報の格納場所
[-] 3.9.0.5. TODO

http://bibo-log.blog.so-net.ne.jp/2012-03-13 によると、 Ubuntu でも Network UPS Tools を使うことで監視などできるようだ。

[-] 3.9.0.6. 旧情報

(この節、試行錯誤中の旧い情報)

取説とソースは、検索すればオムロンのサイトがヒットする: http://www.omron.co.jp/ese/ups/download/sss/sss.htm

2012/07/04 時点では v2.20 Linux版をソースからコンパイルして入れる。

ソースからコンパイルしようとしたが、以下のエラーが:

/usr/bin/ld: cannot find -lusb

どうやら、usb 通信部分のようだが、ソースには含まれてないようで…。

いや、

$ sudo apt-get install libusb-dev

…でコンパイル通ったが、だめ。 コンパイルしたものを入れても以下となるだけ:

$ tail -f /var/log/kern.log
Jul  5 00:04:15 wtech kernel: [ 7731.320390] ssdDaemon[3086]: segfault at
28aa010 ip 028aa010 sp bfb0268c error 14 in ssdDaemon[8048000+9000]

[-] 3.10. TODO

  • バックアップ, RAID





Generated by juli 2.3.2