日々様々なトラブルにハマっている、困ったシステム管理者の奮闘日記です。

Raspberry piをlampサーバに仕立てる

前々から気になっていたRaspberry pi(ラズベリー・パイ)という手のひらサイズのコンピュータがある。
この度、ようやく手に入れたので少しいじってみる。

用途としては、

  • 自宅内のWebサーバ(phpとデータベースも動かしたいな)
  • 自宅内ネットワークのDNSサーバ(PC, VMwareのゲストOSがやたら多いんで、これで名前解決を一元化したい)
  • 外部から自宅ネットワークへ接続するためのVPNサーバ

に使おうかと。

今回はRaspberry pi B+を手に入れたので、これに

  • 16GBのmicroSDカード
  • 40GBの2.5インチHDD (たまたま家に余っていたIDEのハードディスク)

を取り付けよう。

HDDは次の専用のケースに入れてUSB接続する。

インストールするOSは、いろいろ試した結果Arch Linux のRaspberry Pi 対応版にすることになった。

というのは、Raspberry Piのメインの記録メディアがSDカードということもあり、なるべくSDカードを酷使しないよう、ファイルシステムに「f2fs」を利用したかったためだ。
当初、Pidoraを使おうとしたのだが、f2fsがうまく認識してくれず、あえなく挫折。
raspbianもなんだかイヤだ(偏屈!)なぁ、と思い、結局Arch Linuxになった経緯がある。

準備するもの

  • Linux(何でも良い)が動作するPC
    VMware上のゲストOSとして動くLinuxでも可。
  • HDMIケーブル
  • HDMI接続ができるモニタ
    HDMI端子のあるテレビでもOK
  • USBキーボード

準備作業

OSイメージのダウンロード

以下のサイトからArch Linux Raspberry Pi 対応の最新版をダウンロードする。

http://os.archlinuxarm.org/os/rpi/

wget http://os.archlinuxarm.org/os/rpi/ArchLinuxARM-2015.10-rpi-2-rootfs.tar.gz

PCの準備

Raspberry Piに使うmicroSDカードの利用ができるようになっていること、USB端子に空きがあること、くらいが条件。

あとは、F2FSファイルシステムを扱うので、事前にf2fs-toolsをPCにインストールしておく。

sudo apt-get install f2fs-tools

SDカード、HDDの準備

Linuxが動くPCにSDカードを差し、Gpartedなどでパーティションを作成。
/boot用に50MB程度とりfat32でフォーマット、残り全てをf2fsでフォーマットして使う

・SDカードにシステムをコピー

# mkdir /mnt/boot
# mkdir /mnt/rootfs

# mount -t vfat /dev/sdc1 /mnt/boot
# mount -t f2fs /dev/sdc2 /mnt/rootfs

・予めダウンロードしたディレクトリへ移動し、圧縮イメージを展開する。

# cd ダウンロード
# tar -xf ArchLinuxARM-rpi-latest.tar.gz /mnt/rootfs/
# sync
# cp -rp /mnt/rootfs/boot/* /mnt/boot/ <--- /boot の内容を/dev/sdc1にコピーする

/boot のファイルの設定

・config.txtの設定

最下行に下記を記述

→外部接続のHDDに電源を供給するため

# vi /mnt/boot/config.txt
--------------------------------------------------------
  :
safe_mode_gpio=4
max_usb_current=1
--------------------------------------------------------

・cmdline.txtの設定
OSがF2FSでフォーマットされたルートを認識するための設定

# vi /mnt/boot/cmdline.txt

--------------------------------------------------------
root=/dev/mmcblk0p2 rw rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop

——————————————————–

--------------------------------------------------------
root=/dev/mmcblk0p2 rw rootfstype=f2fs rootwait console=ttyAMA0,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 elevator=noop
--------------------------------------------------------

外付けHDDの操作

40GBのうち、1GBをswapに、のこりをext4でフォーマットする。
GPartedで行っても可。
HDDには、頻繁にファイル書き込みが発生するであろう /var, /home, /root を置くことにする。

#mkdir /mnt/var
 # mount /dev/sdd2 /mnt/var

・外付けHDDのvarのUUIDを調べて/etc/fstabに設定

#blkid
  :
/dev/sdc1: SEC_TYPE="msdos" LABEL="BOOT" UUID="D842-552C" TYPE="vfat"
/dev/sdd1: UUID="12930a7d-a593-4402-8394-0f17df8db020" TYPE="swap"
/dev/sdd2: LABEL="var" UUID="115dcc28-0b50-4f28-84a2-91dc56a693dc" TYPE="ext4"
vi /mnt/rootfs/etc/fstab
--------------------------------------------------------
 :
/dev/mmcblk0p2                            /    f2fs discard,noatime,nodiratime 0 1
UUID=115dcc28-0b50-4f28-84a2-91dc56a693dc /var ext4 defaults 0 0
--------------------------------------------------------

・HDD, microSDカードをアンマウントし、Raspberry Piにセット

Raspberry Pi本体の設定

基本設定

ここからは、Raspberry Pi にmicroSDカード、HDDをセットし、HDMIケーブルでモニタと接続、キーボードを接続して行う。

rootパスワードの変更

#passwd

タイムゾーンの設定

#rm /etc/localtime
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ホスト名の設定

#vi /etc/hostname

ユーザの作成

# useradd -m -g users hoge
# passwd hoge

ネットワークの設定

今回は、systemd-networkdを使う
固定IPへの変更

#vi /etc/systemd/network/eth0.network
---------------------------------------------------------------
[Match]
Name=eth0

[Network]
#DHCP=both
DHCP=none
Address=192.168.0.100/24
Gateway=192.168.0.1
DNS=192.168.0.1
---------------------------------------------------------------

DHCPサービスを停止

#systemctl disable dhcpcd@eth0.service

再起動し、sshでログインできることを確認。

更新・必要ツールのインストール

・パッケージの更新

#pacman -Syu

・vimのインストール

# which vi
/usr/bin/vi
# ls -l /usr/bin/vi
lrwxrwxrwx 1 root root 2 Jul 6 2014 /usr/bin/vi -> ex

# pacman -S vim
rubyやらpythonやら、いっぱいインストールされる。

# ln -sf /usr/bin/vim /usr/bin/vi

・sudoのインストール

#pacman -S sudo
#visudo
%wheel ALL=(ALL) ALLのコメントを外す
# usermod -G wheel hoge

当該ユーザは一旦ログアウト→ログインすること

MySQLのセットアップ

インストール

# pacman -S mariadb
# vi /etc/mysql/my.cnf

innodbのコメントをすべて外す。

# mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
#systemctl start mysqld

タイムアウトが原因で1回で起動しないことがある。
なんどかstartをトライすると起動する。その後、OK。

正常に起動したら下記実行

#systemctl enable mysqld

MySQLのセキュリティ向上設定

#/usr/bin/mysql_secure_installation

画面上の問いに答えていく。基本すべてデフォルト値で良い。

phpのセットアップ

インストール

#pacman -S php
#vi /etc/php/php.ini

apacheのセットアップ

インストール

#pacman -S apache php-apache

設定

#systemctl start httpd

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
AH00013: Pre-configuration failed

といわれる。
httpd.confで対応

#vi /etc/httpd/conf/httpd.conf
---------------------------------------------------------------
:
#LoadModule mpm_event_module modules/mod_mpm_event.so <----- コメントアウト
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so <-- コメント外す
:
---------------------------------------------------------------

Apacheの諸情報(OSの種類やらモジュールやら)の表示をやめる

#vi /etc/httpd/conf/extra/httpd-default.conf
---------------------------------------------------------------
:
#ServerTokens Full <--- やめる
ServerTokens Prod <---- 新規に記述
:
---------------------------------------------------------------

以上


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply