さて、前回まででapache2.4やphp7.1、mysql5.7の現時点での最新版がインストール出来ました。
でも、細かな設定をしていません。
特にapacheとmysql、どこをデータ領域として使用するか。
購入したusbメモリ
購入したのはSanDiskのCruzer Fit USBフラッシュメモリー 64GBというもの。
購入ポイントとしては以下。
- 容量がMicroSDカード(32GB)よりも大きいこと。
- USBインターフェイスはラズパイに合わせて2.0でよい。
- 安いこと。
こんなところです。
本当は速度とか温度とかあるんだけど、使ってみないと分からないよね。
てなわけで、どちらかというと安さ重視で買ってみました。
usbメモリのパーティション切りでプチはまり
まず、usbメモリを接続する前に以下のコマンドでsyslogを監視。
$ sudo tail -f /var/log/message
May 15 23:41:59 mng-svr01 kernel: [ 9.834591] Bluetooth: HCI socket layer initialized
May 15 23:41:59 mng-svr01 kernel: [ 9.834600] Bluetooth: L2CAP socket layer initialized
May 15 23:41:59 mng-svr01 kernel: [ 9.834618] Bluetooth: SCO socket layer initialized
May 15 23:41:59 mng-svr01 kernel: [ 9.844464] Bluetooth: HCI UART driver ver 2.3
May 15 23:41:59 mng-svr01 kernel: [ 9.844478] Bluetooth: HCI UART protocol H4 registered
May 15 23:41:59 mng-svr01 kernel: [ 9.844484] Bluetooth: HCI UART protocol Three-wire (H5) registered
May 15 23:41:59 mng-svr01 kernel: [ 9.844609] Bluetooth: HCI UART protocol BCM registered
May 15 23:42:00 mng-svr01 kernel: [ 10.511200] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
May 15 23:42:00 mng-svr01 kernel: [ 10.511214] Bluetooth: BNEP filters: protocol multicast
May 15 23:42:00 mng-svr01 kernel: [ 10.511329] Bluetooth: BNEP socket layer initialized
この状態でラズパイにusbメモリを接続すると、、、
May 15 23:54:23 mng-svr01 kernel: [ 745.301928] usb 1-1.5: new high-speed USB device number 4 using dwc_otg
May 15 23:54:23 mng-svr01 kernel: [ 745.402851] usb 1-1.5: New USB device found, idVendor=0781, idProduct=5571
May 15 23:54:23 mng-svr01 kernel: [ 745.402874] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 15 23:54:23 mng-svr01 kernel: [ 745.402888] usb 1-1.5: Product: Cruzer Fit
May 15 23:54:23 mng-svr01 kernel: [ 745.402900] usb 1-1.5: Manufacturer: SanDisk
May 15 23:54:23 mng-svr01 kernel: [ 745.402912] usb 1-1.5: SerialNumber: XXXXXXXXXXXXXXXXXXXX
May 15 23:54:23 mng-svr01 kernel: [ 745.405085] usb-storage 1-1.5:1.0: USB Mass Storage device detected
May 15 23:54:23 mng-svr01 kernel: [ 745.406879] scsi host0: usb-storage 1-1.5:1.0
May 15 23:54:24 mng-svr01 kernel: [ 746.403034] scsi 0:0:0:0: Direct-Access SanDisk Cruzer Fit 1.00 PQ: 0 ANSI: 6
May 15 23:54:24 mng-svr01 kernel: [ 746.404634] sd 0:0:0:0: [sda] 122830848 512-byte logical blocks: (62.9 GB/58.6 GiB)
May 15 23:54:24 mng-svr01 kernel: [ 746.405615] sd 0:0:0:0: [sda] Write Protect is off
May 15 23:54:24 mng-svr01 kernel: [ 746.406076] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
May 15 23:54:24 mng-svr01 kernel: [ 746.414997] sd 0:0:0:0: Attached scsi generic sg0 type 0
May 15 23:54:24 mng-svr01 kernel: [ 746.417530] sda: sda1
May 15 23:54:24 mng-svr01 kernel: [ 746.420607] sd 0:0:0:0: [sda] Attached SCSI removable disk
容量は62.9 GB/58.6 GiBで認識、デバイスはsda1で認識しているっぽい。よしよし。
それじゃ、usbメモリにパーティションを作っていく。fdiskってコマンドを使うんだって。
$ sudo fdisk /dev/sda
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p ←パーティション情報を表示
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: sun
Device Start End Sectors Size Id Type Flags
/dev/sda1 0 122728447 122728448 58.5G 83 Linux native
/dev/sda2 122728448 122830847 102400 50M 82 Linux swap u
/dev/sda3 0 122830847 122830848 58.6G 5 Whole disk
なななんか!すでに容量ほぼMaxでLinux nativeパーティション出来てるし、50Mでswapパーティションも出来てるし、よく分からん状態!
なので、一度全部削除。
Command (m for help): d ←パーティションを削除
Partition number (1-3, default 3): ←ENTERのみ。3番目のパーティションを選択
If you want to maintain SunOS/Solaris compatibility, consider leaving this partition as Whole disk (5), starting at 0, with 122830848 sectors
Partition 3 has been deleted.
Command (m for help): p ←パーティション情報を表示
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: sun
Device Start End Sectors Size Id Type Flags
/dev/sda1 0 122728447 122728448 58.5G 83 Linux native
/dev/sda2 122728448 122830847 102400 50M 82 Linux swap u
Command (m for help): d ←パーティションを削除
Partition number (1,2, default 2): ←ENTERのみ。2番目のパーティションを選択
Partition 2 has been deleted.
Command (m for help): p ←パーティション情報を表示
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: sun
Device Start End Sectors Size Id Type Flags
/dev/sda1 0 122728447 122728448 58.5G 83 Linux native
Command (m for help): d ←パーティションを削除
Selected partition 1
Partition 1 has been deleted.
これで全てのパーティションを削除したった。
さて、では新しくパーティションを作っていく。
パーティションは2つ、すなわち20GBと残りって感じにします。
Command (m for help): n ←パーティションを作成
Partition number (1-8, default 1): 1 ←1個目なので1を入力
First sector (0-122830848, default 0): 0 ←セクタの最初から作りたいので0
Last sector or +sectors or +size{K,M,G,T,P} (0-122830848, default 122830848): +20G ←20GBのパーティションを作りたいので「+20G」と入力
Created a new partition 1 of type 'Linux native' and of size 20 GiB.
Command (m for help): p
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: sun
Device Start End Sectors Size Id Type Flags
/dev/sda1 0 41943039 41943040 20G 83 Linux native
Command (m for help): n ←更にパーティションを作成
Partition number (2-8, default 2): 2 ←2個目なので2を入力
First sector (41943040-122830848, default 41943040): ←2個目のパーティションは残り全部なのでデフォ値のままENTER
Last sector or +sectors or +size{K,M,G,T,P} (41943040-122830848, default 122830848):
Created a new partition 2 of type 'Linux native' and of size 38.6 GiB.
Command (m for help): p
Disk /dev/sda: 58.6 GiB, 62889394176 bytes, 122830848 sectors
Geometry: 64 heads, 32 sectors/track, 59976 cylinders
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: sun
Device Start End Sectors Size Id Type Flags
/dev/sda1 0 41943039 41943040 20G 83 Linux native
/dev/sda2 41943040 122830847 80887808 38.6G 83 Linux native
Command (m for help): w ←パーティション情報をusbに書き込んで終了
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
これで、20GBと38.6GBの2つのパーティションが作成できました。
そして一旦reboot。
そんじゃフォーマット。
$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
The file /dev/sda1 does not exist and no size was specified.
ありゃ?sda1が無い。。。fdisk -lするとちゃんと/dev/sda1も/dev/sda2も存在するのに。
/devの下にあるのはsdaでsda1もsda2も存在しない。なんでや?
てな感じで今回はここがはまりポイント。
色々考えたけど、/dev/sdaを一度フォーマットしちゃおう!ってことになりました。
$ sudo mkfs.ext4 /dev/sda
そしてもう一度fdiskでパーティション切りなおしました。
そしたら今度は/devの下にはsda、sda1、sda2が出来てました。どうしてだ?!まぁ、よいか。
つ~わけで、各パーティションごとにフォーマット。
$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 92a73bd7-e885-4fd3-9617-9185f86ae1b0
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo mkfs.ext4 /dev/sda2
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 10110720 4k blocks and 2531328 inodes
Filesystem UUID: 75fc2baf-c06b-45e3-80c1-ff377fe93220
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
ラズパイにusbメモリをマウントさせる
パーティションに対するUUIDを調べる。
$ sudo blkid /dev/sda1
/dev/sda1: UUID="92a73bd7-e885-4fd3-9617-9185f86ae1b0" TYPE="ext4" PARTUUID="35939d2e-01"
$ sudo blkid /dev/sda2
/dev/sda2: UUID="75fc2baf-c06b-45e3-80c1-ff377fe93220" TYPE="ext4" PARTUUID="35939d2e-02"
このUUIDを指定してmountする。
その前にマウントポイント(mountする先のディレクトリ)を作成する。
$ sudo mkdir /date
$ sudo mkdir /backup
そしたらマウントの設定。
$ sudo vim /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
UUID="92a73bd7-e885-4fd3-9617-9185f86ae1b0" /data ext4 defaults,noatime 0 0 ←追加
UUID="75fc2baf-c06b-45e3-80c1-ff377fe93220" /backup ext4 defaults,noatime 0 0 ←追加
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
ちなみにfstabの書式は以下サイトを参考にさせて頂きました。
これでrebootして、以下のコマンドでusbメモリがマウントされているか確認。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/root 29G 2.5G 25G 9% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 6.5M 481M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda2 38G 48M 36G 1% /backup ←mountされてる
/dev/sda1 20G 44M 19G 1% /data ←mountされてる
/dev/mmcblk0p1 63M 21M 42M 33% /boot
出来た!ひゃっほー!
MySQLの設定
さて、そしたらusbメモリをmountした/dataの下にmysqlを作ってそこをdbのデータディレクトリにする。
$ sudo mv /data/mysql
次は今までのdataディレクトリの内容を/data/mysqlの下にコピーする。これはrootで作業した。
$ su -
パスワード:
# cd /var/lib/mysql
# cp -rf * /data/mysql/.
コピーしたファイルはrootの所有物になっているので、mysqlユーザーの所有物に変更する。
# chown -R mysql:mysql /data/mysql/
# exit
あとは、mysqlの設定ファイルを本格的に作る。
$ sudo vim /etc/mysql/mysql.conf.d/rpi-my.cnf
[mysqld]
# ユーザー
user=mysql
# ベースディレクトリ
basedir=/var/lib/mysql
# データディレクトリ
datadir=/data/mysql
# ポート番号
port=3306
# UNIXドメインソケット
socket=/var/run/mysqld/mysqld.sock
# デフォルトのストレージエンジンの指定
default_storage_engine=InnoDB
# バッファプールサイズの指定
innodb_buffer_pool_size=128MB
# サーバ側が使用するデフォルトの文字コード
character-set-server=utf8mb4
# 各MySQLサーバを識別するためのIDの設定
server-id=1
# バイナリログの有効化
log_bin=mysql-bin
# バイナリログのフォーマットの指定
binlog-format=ROW
# バイナリログを保存しておく日数
expire_logs_days=7
# スロークエリログの有効化
slow_query_log=1
# 何秒以上かかったクエリをスロークエリログへ記録するかを指定(単位:秒)
long_query_time=3.0
# この値より少ない行数を読み込んだクエリはスロークエリログへ記録しない
min_examined_row_limit=0
# スロークエリログファイルの出力先の指定
slow_query_log_file=/var/log/mysql/slow_query.log
# エラーログの出力先の指定
log-error=/var/log/mysql/mysqld.log
# エラーログのタイムゾーンの指定
log_timestamps=SYSTEM
[client]
# クライアント側が使用するデフォルトの文字コード
default-character-set=utf8mb4
これで、mysqlを再起動。
$ sudo service mysql restart
Apacheの設定。そして大ハマり
/dataの下にApache用のディレクトリを作成。そんでもって、今までのDocumentRootだった/var/www/htmlの下のファイルをコピー。
$ sudo mkdir /data/htdocs
$ cp /var/www/html/* /data/htdocs/.
あとはApacheの設定ファイルのDocumentRootを/data/htdocsに変更。
そして、DocumentRootを変更した場合はDirectoryディレクティブを記述しなければならん。なぜだ?!なぜなんだ?!なぜ403が出る?!そして元のDocumentRootのDirectoryディレクティブはどこに記述されているんだぁぁぁ?!
今回ここが一番ハマった気がする。。。
$ sudo vim /etc/apache2/sites-available/000-default.conf
# DocumentRoot /var/www/html
DocumentRoot /data/htdocs
<Directory /data/htdocs/>
# FollowSymLinksはシンボリックリンクのリンク先をたどれるようにする。
# MultiViewsはコンテントネゴシエーションを有効にし、ブラウザから
# 送信されるHTTPヘッダにあわせてレスポンスを変えるとかができるようにする。
Options FollowSymLinks MultiViews
# .htaccess で使用できるディレクティブを指定する為のディレクティブ。
# .htaccess で設定可能なものは全て有効。
AllowOverride All
# サーバーのディレクトリに接続してくるクライアントについて、
# 許可・拒否する条件を指定するディレクティブ。
# すべてのクライアントからの接続を許可する。
Require all granted
</Directory>
Apacheを再起動。
$ sudo service apache2 restart
さぁ、これでhtmlのファイルをガンガン作成したり、DBガンガン更新したり出来るな!
コメント