【導入】Ubuntu 14.04 Server

GIGABYTE Brix Core i7搭載モデル（DIMM8GBx2, SSD128GB, WIFI）にUbuntu 14.04 LTSをインストールした際のメモ。

インストール
------------

### パーティション設定

| **Partition**    | **File System** | **Mount Point** | **Size**   | **Flags** |
|:-----------------|:----------------|:----------------|-----------:|:----------|
| /dev/sda1        | fat32           | /boot/efi       |    256 MiB | boot      |
| /dev/sda2        | ext3            | /boot           |    256 MiB | msftdata  |
| /dev/sda3        | linux-swap      | (swap)          |  16.00 GiB |           |
| /dev/sda4        |                 |                 | 119.00 GiB | lvm       |
| /dev/vg01/root   | ext4            | /               |  20.00 GiB |           |
| /dev/vg01/data   | ext4            | /srv            |  82.74 GiB |           |

パーティションツールを起動する。

```sh
$ sudo parted
```

パーティション（システム領域）を作成する。

```sh
# ディスク0選択
(parted) select /dev/sda

# パーティション種別設定（GPT）
(parted) mklabel gpt

# パティション作成
(parted) unit MiB
(parted) mkpart efi 0% 257
(parted) mkpart boot 257 513
(parted) mkpart swap 513 16897
(parted) mkpart volume 16897 100%

# フラグ設定変更
(parted) set 1 boot on
(parted) set 4 lvm on

# 結果確認
(parted) print
Model: ATA PLEXTOR PX-128M5 (scsi)
Disk /dev/sda: 119GiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start    End      Size     File system     Name    Flags
 1      0.00GiB  0.25GiB  0.25GiB  fat16           efi     boot
 2      0.25GiB  0.50GiB  0.25GiB  ext3            boot    msftdata
 3      0.50GiB  16.5GiB  16.0GiB  linux-swap(v1)  swap
 4      16.5GiB  119GiB   103GiB                   volume  lvm
 
# パーティションツール終了
(parted) quit
```

LVMボリュームを作成する。

```sh
# パーティションをLVM用に初期化
$ sudo pvcreate /dev/sda4

# ボリュームグループ作成
$ sudo vgcreate vg01 /dev/sda4

# 論理ボリューム作成
$ sudo lvcreate -L 20GiB -n root vg01
$ sudo lvcreate -l 100%FREE -n data vg01

# 確認
$ sudo lvdisplay
```

ボリュームをフォーマットする。

```bash
$ sudo mkfs.vfat /dev/sda1
$ sudo mkfs.ext3 /dev/sda2
$ sudo mkswap /dev/sda3
$ sudo mkfs.ext4 /dev/vg01/root
$ sudo mkfs.ext4 /dev/vg01/data
```


### OSインストール

* インストール用USBを本体に挿入して電源をONにし、F12を押して表示されるメニューから「UEFI:～」を選択し、インストーラをUEFIブートする。  
  ![picture178-1.png](https://qiita-image-store.s3.amazonaws.com/0/14474/73049b5c-143e-d598-b476-f33b0729e2e0.png)
* 「Install Ubuntu Server」を実行する。  
  ![picture178-2.png](https://qiita-image-store.s3.amazonaws.com/0/14474/c3873b31-899d-8f2a-c8a5-88159ebaf4eb.png)
* [!!] Select a language ⇒ 「Japanese - 日本語」を選択する。
* [!] Select a language ⇒ 「はい」を選択する。
* [!] 場所の選択 ⇒ 「日本」を選択する。
* [!] キーボードの設定（キーボード配列を検出しますか？） ⇒ 「いいえ」を選択する。
* [!] キーボードの設定 ⇒ 「日本語」＞「日本語」を選択する。
* [!!] ネットワークの設定（プライマリネットワークインターフェイス） ⇒ 「p1p1」を選択する。
* DHCPでネットワークを設定しています ⇒ 「キャンセル」を選択する。
* [!!] ネットワークの設定 ⇒ 「続ける」を選択する。
* [!!] ネットワークの設定 ⇒ 「手動で設定」を選択する。  
  　　　　IPアドレス：192.168.0.200/24  
  　　　　ゲートウェイ：192.168.0.1  
  　　　　ネームサーバアドレス：192.168.0.1  
* [!] ネットワークの設定  
  　　　　ホスト名：brix  
  　　　　ドメイン名：home.local
* [!!] ユーザとパスワードのセットアップ  
  　　　　新しいユーザの本名（フルネーム）：  
  　　　　あなたのアカウントのユーザ名：  
  　　　　新しいユーザのパスワードを選んでください：  
  　　　　確認のため、再度パスワードを入力してください：
* [!] ユーザとパスワードのセットアップ ⇒ 「いいえ」を選択する。
* [!!] ディスクのパーティショニング ⇒ 「手動」を選択する。

```
LVM VG vg01, LV data - 88.8 GB Linux device-mapper (linear)
     1.     88.8 GB     F  ext4              /srv
LVM VG vg01, LV root - 21.5 GB Linux device-mapper (linear)
     1.     21.5 GB     F  ext4              /
SCSI1 (0,0,0) (sda) - 128.0 GB ATA PLEXTOR PX-128M5
             1.0 MB        空き領域
     1.    268.4 MB  B  K  EFIboot   efi
     2.    268.4 MB     F  ext3      boot    /boot
     3.     17.2 GB     F  スワップ  swap    スワップ
     4.    110.3 GB     K  lvm       volume
           335.4 kB        空き領域
```

* [!!] ディスクのパーティショニング ⇒ 「パーティショニングの終了とディスクへの変更の書き込み」を選択する。
* [!!] ディスクのパーティショニング ⇒ 「はい」を選択する。
* [!] taskselを設定しています ⇒ 「セキュリティアップデートを自動的にインストールする」を選択する。
* [!] ソフトウェアの選択 ⇒ 「OpenSSH server」を選択する。
* [!] ハードディスクへのGRUBブートローダのインストール ⇒ 「はい」を選択する。
* [!!] インストールの完了 ⇒ 「続ける」を選択する。


セットアップ
------------

### ネットワーク設定

IPアドレスを設定する。

```sh
$ sudo vi /etc/network/interface
```
```
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto p1p1
iface p1p1 inet static
    address 192.168.0.200
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 202.216.224.67 202.216.224.66
    dns-search home.local
```

IPv6を無効化する。

```sh
$ sudo vi /etc/sysctl.conf
```
```
net.ipv6.conf.all.disable_ipv6 = 1
```


### ファイアウォール設定

ファイアウォールのルールを追加する。

```sh
$ sudo ufw default DENY
$ sudo ufw allow OpenSSH
$ sudo ufw allow Apache
```

ファイアウォールを有効にする。

```sh
$ sudo ufw enable
```


### SSHサーバ設定

```sh
$ sudo vi /etc/ssh/sshd_config
```
```
# rootのSSHログインは公開鍵認証のみ許可する
PermitRootLogin without-password

# RSA公開鍵認証を有効にする
RSAAuthentication yes
PubkeyAuthentication yes

# rhosts認証を無効にする
RhostsRSAAuthentication no

# パスワードなしを禁止する
PermitEmptyPasswords no

# チャレンジ／レスポンス認証を無効にする
ChallengeResponseAuthentication no

# パスワード認証を無効にする
PasswordAuthentication no

# クライアントIPアドレスに対するDNS逆引きを行わない
UseDNS no
```


### その他OS設定

パッケージを更新する。

```sh
$ sudo aptitude update
$ sudo aptitude safe-upgrade
$ sudo apt-get autoremove
```

etc変更管理のためetckeeperをインストールする。

```sh
$ sudo aptitude install git etckeeper
$ sudo vi /etc/etckeeper/etckeeper.conf
```
```
#VCS="git"
VCS="bzr"
  ↓
VCS="git"
#VCS="bzr"
```
```sh
$ sudo git config --global --add user.name 'Takamatsu Makoto'
$ sudo git config --global --add user.email 'tkmtmkt@gmail.com'
$ sudo git config --global --add http.sslVerify false
$ sudo etckeeper init
```

時刻同期のためntpをインストールする。

```sh
$ sudo aptitude install ntp
$ sudo vi /etc/ntp.conf
```
```
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 0.jp.pool.ntp.org
server 1.jp.pool.ntp.org
server 2.jp.pool.ntp.org

server ntp.ubuntu.com
  ↓
server ntp.nict.jp
```
```sh
$ sudo service ntp stop
$ sudo ntpdate ntp.nict.jp
$ sudo service ntp start
```

デフォルトのエディタ設定をviに変更する。

```sh
$ sudo update-alternatives --config editor
```
```shell-session
alternative editor (/usr/bin/editor を提供) には 5 個の選択肢があります。

  選択肢    パス              優先度  状態
------------------------------------------------------------
* 0            /bin/nano            40        自動モード
  1            /bin/ed             -100       手動モード
  2            /bin/nano            40        手動モード
  3            /usr/bin/emacs24     0         手動モード
  4            /usr/bin/vim.basic   30        手動モード
  5            /usr/bin/vim.tiny    10        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 4
```


### 日本語環境設定

日本語パッケージをインストールする。

```sh
$ sudo aptitude install language-pack-ja
$ sudo aptitude install ubuntu-extras-keyring
```

* 日本語ロケール生成

```sh
sudo localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
sudo vi /var/lib/locales/supported.d/ja
```
```
ja_JP.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP
ja_JP.SJIS SJIS
```
```sh
$ sudo locale-gen
```

日本語フォントをインストールする。

```sh
$ sudo aptitude install fonts-ipafont-gothic
```


### アカウント設定

アカウントを追加する。

```sh
$ sudo useradd -u 20000 -c 'Takamatsu Makoto' -m -s /bin/bash takamatu
$ sudo passwd takamatu
```
```shell-session
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
```

管理者権限を付与する。

```sh
$ sudo gpasswd -a takamatu sudo
```
```shell-session
Adding user takamatu to group sudo
```


パッケージインストール
----------------------

### 環境用

```sh
$ sudo aptitude install p7zip p7zip-full
$ sudo aptitude install vim tmux
```


### 管理用

* パッケージファイル検索

```sh
$ sudo aptitude install apt-file
$ sudo apt-file update
```

* システム状態確認

```sh
$ sudo aptitude install sysstat
$ sudo vi /etc/default/sysstat
```
```
ENABLED="false"
　↓
ENABLED="true"
```

* サーバ構成管理ツール

```sh
$ sudo aptitude install ansible
```


### 開発用

* バージョン管理ツール

```sh
$ sudo aptitude install git-all gitstats tig
$ sudo aptitude install mercurial
$ sudo aptitude install subversion cvs2svn statsvn
$ sudo aptitude install cvs statcvs
$ sudo aptitude install fossil sqlite3
```


ユーザ環境設定
--------------

### SSH接続設定

SSH鍵ペアを作成する。

```sh
$ ssh-keygen
```

接続先情報を作成する。

```sh
$ cat <<EOS | tee ~/.ssh/config
Host sakura
    Hostname www11234ui.sakura.ne.jp
    User takamatu
EOS
```
```sh
$ chmod go-w ~/.ssh/config
```

SSH公開鍵を転送する

```sh
$ ssh-copy-id sakura
```


### コンソール環境設定

dotfilesを取得する。

```sh
$ mkdir ~/git
$ cd ~/git
$ git clone https://github.com/tkmtmkt/dotfiles.git
$ cd ~/git/dotfiles
$ git submodule init
$ git submodule update
```

dotfilesを配置する。（シンボリックリンク作成）

```sh
$ cd ~/git/dotfiles
$ mv ~/.basharc ~/.bashrc.org
$ ansible-playbook mklink.yml -i hosts
```


### コンソール起動スクリプト

既存のtmuxセッションがあればattachし、なければ新しいtmuxセッションを作成するスクリプト。
サーバにssh接続してconと叩いてセッションを開始し、作業中断時にCtrl+t、Ctrl+dでセッションを抜ければ、次にconと叩いたときに作業中のコンソールを再開する。

```sh
$ mkdir ~/bin
$ cat <<EOS | ~/bin/con
#!/bin/bash

if [ -z "\$(tmux list-session 2> /dev/null)" ] ; then
  TMUXCMD="tmux new-session"
else
  TMUXCMD="tmux attach-session"
fi

echo "\$TMUXCMD \; set set-titles on \; set set-titles-string \$HOSTNAME"
\$TMUXCMD \; set set-titles on \; set set-titles-string \$HOSTNAME

# vim: set ts=2 sw=2 et:
EOS
```
```sh
$ chmod +x ~/bin/con
```