自宅のNASを更新するにあたって、今回はパソコンを利用してNASを構成することとし、そのための機械が組み上がった。
OSの選定
順当に考えれば、以前使ったことのあるCentOSの最新版である7系になるが、なんだか魅力的に感じなかった。
世間で簡単LInuxとして人気のUbuntuは、なんか負けた気がするから嫌。
ここは一般にサーバ向きといわれないArch Linuxを攻めてみる。
サーバに不向きといわれる理由は、長期サポートが無いこと、サーバ向け構成で一発インストールするオプションが無いこと、頻繁にアップデートされることによりときどき設定の変更に迫られること、常に最新版をインストールするしかないためインストールする時期が違えば設定内容が変わってくること、といったところであろう。
だが、最小インストールから一つずつ自分で追加していくというスタイルは、隅々まで構成を把握したいとか、必要ないものは入れたくないとか、そういうことが可能になり、これはこれでサーバとして利用する際の利点にもなると思う。
とにかく起動できるようになるまで
公式の解説通り複数のインストール方法があるが、ここではすでに稼働しているArch Linuxのシステムがあるので、インストールメディアを作成せず、この環境を利用してインストールを行う。
まずは、既存の環境に新規インストール用スクリプトをインストール。
# pacman -S arch-install-scripts
パーティションの作成
まず、既存のシステムに新しいSSDを接続し、cgdiskなどでパーティションを作成する。
ここでは、GPTディスクでUEFIブートすることとし、sdb1として/bootに1GB(パーティションタイプをef00としてEFI System Partationに指定)、sdb2として/に50GB割り振った。
swapについては後でswapfileを作成することにし、パーティションにはしなかった。
将来SSDを他のことに使うかもしれないので、領域を半分残した。
cgdiskが勝手に先頭に約1MBの領域を残したが、これはGRUB2でBIOSブートする際のためのもの。つぶしてもよかったが、ここでは残しておいた。
作成したパーティションをフォーマットしてマウントする
# mkfs.ext4 /dev/sdb2
# mkfs.vfat -F32 /dev/sdb1
# mount /dev/sdb2 /mnt
# mkdir -p /mnt/boot
# mount /dev/sdb1 /mnt/boot
ベースシステムのインストール
# pacstrap -i /mnt base base-devel
fstabの作成
# genfstab -U /mnt >> /mnt/etc/fstab
新しいシステムにchroot
# arch-chroot /mnt /bin/bash
ロケールの設定
ここではシステム全体を英語に設定。
後で作業を行うユーザを作成し、そのユーザのみ日本語にする。
nanoなどを用いて、/etc/locale.genの2カ所をコメント解除。
#en_SG ISO-8859-1
en_US.UTF-8 UTF-8
#en_US ISO-8859-1
...
#ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
#ka_GE.UTF-8 UTF-8
完了したら、
# locale-gen
/etc/locale.confを作成して、内容を記入。
LANG=en_US.UTF-8
同様に/etc/vconsole.confを作成して、内容を記入。
KEYMAP=jp106
FONT=lat9w-16
最後に、
# export LANG=en_US.UTF-8
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
また、この機械はLinuxしか使わない予定なので、ハードウェア時計をUTCにしてしまう。
# hwclock --systohc --utc
ホスト名を指定
好きな名前をホスト名として考え、/etc/hostnameを作成して記入。
/etc/hostsのlocalhostの後ろ(2カ所)にも記入。
とりあえずのネットワーク設定
ネットワークはいったんDHCPで設定するが、GUI環境にしてから固定IPに修正する。
まず
# ip link
を実行し、その結果から使用したいネットワークカードのデバイス名を確認。 ここではenp1s0であった。 この値を用いて、
# systemctl enable dhcpcd@enp1s0.service
rootパスワードを設定
passwd
ブートローダーのインストール
ここではsystemd-bootなどという名前に変わったgummibootを利用する。
とにかくシンプルなUEFIブートができるのが特徴。
# pacman -S dosfstools
# bootctl --path=/boot install
この段階で”Linux Boot Manager”という名前でUEFIに登録される。
しかし設定はまだ終わっていない。
blkidなどで/パーティションのPARTUUIDを確認した後、/boot/loader/entries/arch.confを作成して内容を記入。
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=PARTUUID=[確認したPARTUUID] rw
また、/boot/loader/loader.confを編集
timeout 5
default arch
後はchrootを抜けて
# exit
再起動
正しく設定できていれば、UEFIのブートエントリに”Linux Boot Manager”が追加されており、それを選択するとCUIの画面が表示されるところまで行くはず。
先ほど作成したパスワードでrootでログインし、管理権限のある一般ユーザを作成しておく。
# useradd -m -G wheel -s /bin/bash [ユーザ名]
# passwd [ユーザ名]
とにかくGUIに(GDM+Cinnamon)
サーバなんだからCUIだけで充分だしその方が動作が速いという考えもあるが、おそらく目的よりもかなり高いスペックがあるはずなので、その余裕分を楽をすることにあてる。
どうせなら、Linuxデスクトップの実機を1台確保したといえる程度を目指す。
とにかく関連ソフトをインストールしまくる。
この段階でGUI用のターミナルエミュレータを入れておかないと後で面倒なことになる。
ここではSakuraを選択。
# pacman -S xf86-video-ati
# pacman -S gdm
# pacman -S cinnamon
# pacman -S sakura
これでそろったはずなので、GUIを動かしてみる。
# systemctl start gdm
無事に画面がでたら、先ほど作成した一般ユーザでログインしてみる。
デスクトップ環境を選ぶことができるので、cinnamonを選択。
問題なければ再起動。
最後のCUIで、GUIが自動起動するように設定。
# systemctl enable gdm
今後、起動すればすぐにGUIとご対面できるようになる。一安心。
この先の作業はGUI環境からターミナルエミュレータを起動して行う。
日本語化
まずは日本語のフォントをインストールする。
# pacman -S ttf-sazanami
# pacman -S otf-ipafont
~/.xprofileを作成し、内容を記入。
export LANG=ja_JP.UTF-8
これで再起動すると日本語表示になる。
かなり安心。
次に日本語入力ができるようにする。
ここではfcitx+mozcとした。
mozcはGoogle日本語入力のLInux版であり、かなりWindowsに近い感覚で入力できる。
# pacman -S fcitx-mozc
# pacman -S fcitx-configtool
fcitxを起動するための設定を~/.xprofileに追記。
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
再起動で日本語入力が可能に。
その他よく使うソフトをインストール
firefoxの日本語版。
インストール直後はCinnamonのメニューに出なくて焦るが、再起動したらでる。
# pacman -S firefox-i18n-ja
テキストエディタ
# pacman -S leafpad
OwnCloudのクライアント。
keyringを入れないと毎回パスワードを聞かれてしまう。
# pacman -S owncloud-client
# pacman -S gnome-keyring
Cinnamon(Nemo)のGUIからSMBの共有を見ることができるように
# pacman -S smbclient
# pacman -S gvfs-smb
その他ユーティリティ。
# pacman -S gnome-system-monitor
# pacman -S acpid
# pacman -S cpupower
# pacman -S lm_sensors
# pacman -S xfce4-goodies
(xfce4を使うのではないが、いろんなユーティリティが入って便利)
その他Linuxデスクトップとして使用するために必要であろう設定
ネットワーク設定
インストール時に作成した仮の設定を止め、CinnamonのGUIで設定できるようにする。
np1s0の部分は環境によって変わる。
# systemctl disable dhcpcd@enp1s0.service
# systemctl enable NetworkManager
ここでは、最終的にサーバにするので固定ローカルIPを設定した。
AURを使えるように
Arch Linuxでよく使われる非公式レポジトリ。
/etc/pacman.confに追記してコマンドを実行。
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
# pacman --sync --refresh yaourt
swapfileを作成し、休止状態になれるように
# fallocate -l 4G /swapfile
# chmod 600 /swapfile
# mkswap /swapfile
/etc/fstabにも設定する必要があるが、ここでは自動で行われていた。
ここでスワップ領域を作成したのは、あくまで休止状態になれるようにするのが目的であって、物理メモリは潤沢に搭載していてスワップの必要が無い環境なので、通常のスワップが起こらないようにする。
/etc/sysctl.d/99-sysctl.confを作成して、以下を記入。
vm.swappiness=0
swapfileを使って休止状態になるために必要なoffset値を確認する。
# filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 4294967296 (1048576 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 348160.. 348160: 1:
1: 1.. 30719: 348161.. 378879: 30719: unwritten
この場合、offsetは348160になる。
/boot/loader/entries/arch.confのoptionsに以下を追記。
resume=/dev/disk/by-uuid/[blkidなどで確認した/パーティションのUUID] resume_offset=[さきほど確認したoffset]
/etc/mkinitcpio.confを編集。
HOOKS行、blockおよびlvm2のあと、filesystemsの前にresumeを追加。
# mkinitcpio -p linux
これで休止状態になれるようになった。
SSDに最適化し、Trimが行われるように
/etc/fstabを編集。
relatimeをnoatimeにしdiscardを追加。
# systemctl enable fstrim
ここまで、swapfileを除く使用量は5GB程度。
速度を気にしなければUSBメモリとかでも運用できそう。
続く