小規模LANの構築ノウハウ（０） OpenBlockS AX3(LAN2ポート版)をセットアップする

# TL;DR

* いまさら感がありますが，[OpenBlockS AX3(LAN2ポート版)](https://openblocks.plathome.co.jp/products/obs_a/ax3/)を使って，L3ルータ(家庭内LANからインターネットへの出入り口となるマシン)を作るための，セットアップを行います
    * 販売終了がアナウンスされてしまいました(2019年1月29日)
    * セットアップ手順は，[ユーザガイド(pdf)](https://openblocks.plathome.co.jp/common/pdf/OBSA_UsersGuide_1.3.1.pdf)を踏襲します
* Linuxインストール後の作業手順は，他のLinuxマシンのセットアップでも利用できます

# 手順概要

以下の手順でセットアップを行います

1. OpenBlockS(OBS)にSSDを接続します
1. 初期化モードで起動します
1. シリアルケーブルを接続してログインします
1. OBSを初期化します
1. 初期設定として，SSD（ストレージ併用モード）の使用と，ネットワーク接続を行います
1. 初期セットアップ（ツールインストール，ユーザ作成など）

# 0. OpenBlockS概要

以下はLAN2ポート版のスペックです．4ポート版はメモリスロットが付いています．

* 2コアARMv7 1.33GHz
* 1GB RAM
* 1000BASE-T 2ポート
* 2.5インチストレージ接続用SATA3ポート
* Debian Linux 9

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309617/92714412-9fb4-3767-dadf-f00f61791260.jpeg" width=50%>

# 1. OpenBlocksにSSDを接続する

* ケースを開くとSATAスロットが見えるので，SSDを接続します
    * ![IMG_0897.png_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309617/23e760db-8949-8c31-eab5-9ec7689a8bae.jpeg)
* 東芝製SSD 60GBを接続しました
    * ![IMG_0898.png_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309617/3a667697-8511-a96f-7c1c-eba2c7446ff7.jpeg)

# 2. OpenBlockSを初期化モードで起動する

* INITボタンを押しながら電源を接続します
    * 5秒程度立ったらボタンを離します
    * 初期化状態で起動します

# 3. シリアルケーブルを接続してログイン

* USB-Serialケーブルを，OBSのCONSOLEポートとホストPCのUSBポートに接続します
    * ![IMG_0899.png_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309617/d27fd19d-2226-c390-9788-59bfccac6f90.jpeg)
    * [【CISCO互換ケーブル】FTDI chipset USB RJ45 コンソールケーブル](https://www.amazon.co.jp/dp/B00JPFOTOY/)を使用しました
* ホストPCのデバイスマネージャで，COMポートを確認します
    * COM3として認識されました
    * ![5ccd3f00b6d5be0045f17ec9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309617/04c9363c-06b3-1b25-8db6-b802d49e42ec.png)
* ホストPCでputtyを立ち上げます
    * 以下の設定で「接続」すると，OBSのログインプロンプトが表示されます
    * ユーザ```root```，パスワード```root```でログインできます

| 設定 | 値 |
|----|----|
| 接続タイプ | Serial |
| シリアルポート | COM3 |
| スピード | 115200 |

![5ccd3f11b6d5be0045f17ecb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309617/c37647c3-513e-8a5f-acd9-8320c3ed5e42.png)

# 4. OBSの初期化

## RAMディスクとSSDを初期状態にする

* RAMディスク設定の初期化
    * 以下のコマンドを実行します
    * 確認のプロンプトが表示されるので「y」キーで承諾します

```bash
flashcfg -e
flashcfg -E
```

* SSDのラベルを削除して，新たに使えるようにします

```bash
e2label /dev/sda1 ""
```

* ここまでで，OBSが初期状態になります
* ```reboot``` コマンドで再起動すると，初期設定状態なります
    * ただし，まだSSDを使う状態になっていないので，この時点でツールのインストールなどをしても，再起動すると初期状態に戻ってしまいます

## (必要なら) Debian8から9へのアップデート

* eth0にLANケーブルを指し，DHCPサーバが動作する適当なルータに接続します（IPを取得してネットワークに接続できるようにします）
    * 以下のように，モデルに合わせたOSイメージを取得し，```flashcfg```コマンドで書き込みます
    * ```reboot```コマンドで再起動すると，新しいOSイメージでOBSが立ち上がります

```bash
ifdown eth0
dhclient eth0
cd /root
# OBS-AX3 (LANポートが2つのモデル)
wget http://ftp.plathome.co.jp/pub/OBSAX3_2/stretch/4.4.120-0/uImage.initrd.obsax3
# OBS-AX3 (LANポートが4つのモデル)
wget http://ftp.plathome.co.jp/pub/OBSAX3_4/stretch/4.4.120-0/uImage.initrd.obsax3
flashcfg -f uImage.initrd.obsax3

Save firmware file to FlashROM.
Are you ok? [y|N] y
.....<snip>.....
done
reboot
```

# 5. 初期設定

## SSDを使用する設定(ストレージ併用モード)

* 以下のように，```fdisk```コマンドでパーティション設定を行います

```bash
fdisk /dev/sda
Command (m for help): o (パーティションをすべて削除)
Command (m for help): n (パーティション作成)
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p (プライマリパーティションを選択)
Partition number (1-4, default 1): 1 (パーティション番号1)
First sector (2048-117231407, default 2048): (Enterキーでデフォルト設定)
Last sector, +sectors or +size{K,M,G,T,P} (2048-117231407, default 117231407):(Enterキーでデフォルト設定)

Created a new partition 1 of type 'Linux' and of size 55.9 GiB.

Command (m for help): w (パーティションを書き込み)
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
```

* パーティションのフォーマット
    * 作成したパーティションをDEBIANラベルでext4フォーマットします

```bash
mke2fs -t ext4 -j -L DEBIAN /dev/sda1
```

* 以降，再起動するとSSDがマウントされた状態で起動します
    * SSDにOSの状態が不揮発化される，通常のLinuxマシンのように使えるように使えるようになります

## パスワードの変更

* パスワードが```root```だとまずいので，パスワードを変更します

```bash
passwd
# 設定したいパスワードを2回入力
```

## ネットワークの設定

* 初期設定は以下のようになっています

```bash
eth0      inet addr:192.168.254.254  Bcast:192.168.254.255  Mask:255.255.255.0
eth1      inet addr:192.168.253.254  Bcast:192.168.253.255  Mask:255.255.255.0
```

* それを，例えば，以下のように変更します

```
eth0      DHCPで取得
eth1      192.168.100.1/24
```

* eth0にLANケーブルを指し，DHCPサーバが動作する適当なルータに接続しておきます
    * ```/etc/network/interfaces```を編集して，eth0/eth1それぞれのIPの取得方法をしています

```bash
vi /etc/network/interfaces

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
     address 192.168.100.1
     network 192.168.100.0
     netmask 255.255.255.0
     broadcast 192.168.100.255
```

* ネットワーク設定を読み込み直します

```bash    
/etc/init.d/networking restart
```

* DHCPでeth0にIPが割り振られ，ネットワークに接続できることを確認します

# 5. 初期セットアップ

* 以降は通常のDebian系Linuxのセットアップと同様の手順です
* この記事では，以下の手順を紹介します
    * 初期アップデート，aptitudeの利用，各種ツールのインストール
    * ユーザの作成，sudo設定
    * セキュリティ周りの設定

## アップデート＆ツールのインストール

* パッケージマネージャとして```aptitude```を使います
* ```less```，```sudo```，```zsh```をインストールします
* localeの設定もこの時点でしてしまいます

```bash
apt-get update
apt-get install -y aptitude
aptitude update -y
aptitude install -y less sudo zsh rsync curl locales

# localeの設定
cp /etc/locale.gen /etc/locale.gen.orig
sed -i "s/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/" /etc/locale.gen
locale-gen
update-locale LANG=ja_JP.UTF-8
```
    
## ユーザの作成

* 例として，```myoshimi```ユーザを作成します
    * ```users```グループに所属させることにします
    * ログインシェルを```zsh```に変更します
    * sudoersに登録します

```shell
useradd -m -g users myoshimi
passwd myoshimi
# ログインシェルを/bin/zshに変更
chsh myoshimi

# sudoに作成したユーザを追加
sh -c "echo \"myoshimi ALL=(ALL) ALL\" >> /etc/sudoers"
```

## セキュリティ関連の設定

* （必要であれば）selinuxの無効化設定を行います
* sshdのルートログインを禁止します

```shell
# rootログイン禁止
sed -i "s/PermitRootLogin yes/PermitRootLogin no/" /etc/ssh/sshd_config
/etc/init.d/ssh restart

# selinuxの無効化
sed -ir "s/SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
```

## 稼働確認

* ```ssh```コマンドで，OBSのIPアドレス(eth0/eth1のどちら側のネットワークから接続するかによって異なる)にログインできることを確認します
* 以降は，通常のDebianマシンとして運用ができます

# 参考

* [OpenBlockS AX3](https://openblocks.plathome.co.jp/products/obs_a/ax3/)
* [「OpenBlocks AX3 イーサ2ポート」販売終了のお知らせ](https://openblocks.plathome.co.jp/topics/osirase/products_info190129.html)