ConoHaでArchLinuxのサーバーを建てよう
この記事はNomuken氏の手作業による優しい気持ちで復元されました
この記事について
この記事は,美雲このはちゃんで有名なConoHaアドベントカレンダー13日目の記事です.
昨日は,naoto_gohkoさんによる「ConoHaのVMでUbuntu 14.04を使ってs3qlでSwift Object Storageをマウントする」でした.
明日は,tisiharaさんによる「ConoHaでNetBSDのサーバーを建てよう」です.
そうだArchLinuxでサーバーを建てよう
と,思っている皆さんも極めて多いと存じます.
ArchLinuxの詳しい概念等を知りたいのであれば公式の「The Arch Way」が参考になります. 軽快かつ,シンプル,柔軟という点に置いてArchLinuxはサーバに利用するメリットは大きいのではないでしょうか.
特に,VPSサービスの中でISOイメージをアップロードせずにArchLinuxを利用できるのはConoHaだけ!!(おそらく.クラウドは除く) これは,ConoHaでArchLinuxを利用するしかないですね!!
ArchLinuxをサーバ用に選ぶメリット・デメリット
ArchLinuxをサーバに選択するメリットとしては以下の物が上げられるでしょう.
- 設定ファイルがシンプル(勝手な設定が行われていない)
- ユーザの判断でしか動作しない(勝手にサービスを立ち上げて有効化しない)
- 常に最新版
- 軽い
逆にデメリットとしては以下のものが上げられるでしょう,
- 自分で設定しなければいけない(よくある設定はされない)
- インストールしてもすぐには動かない(自分で設定しなくてはいけない)
- 互換性を考慮せずに常に最新版が降ってくる(不用意にバージョンアップすると設定ファイルが互換性が無くて起動しない)
- インストールが大変(自分でインストールするパッケージを選ばなくてはいけない)
これらに対して,多くの議論があるとは思いますがこの記事では触れません.
実際にArchLinuxをサーバとして使えるのかという質問があれば,今見ているこのサーバ(spica.bz)はArchLinuxで動いています. ArchWikiでは,ArchLinuxをサーバ用途に利用することに対して次のように述べています.(ArchWiki - サーバー)
次のような批評または主張を見たことがあるかもしれません: Arch Linux はサーバーのオペレーティングシステムには全く向いていない!。これは真実です: サーバーのインストールディスクというものは存在していません。他のディストリビューションでは用意されているようなディスクのことです。これは Arch Linux には最小限の (しかしながら堅実な) ベースシステムしか含まれていないためで、初めからインストールされているデスクトップまたはサーバーとしての機能は、ほんのわずかしかありません。ただし、このことは Arch Linux をサーバーとして使うべきでないということを意味しません。むしろ正反対です。
実際のところ考えは人によると思いますが,ArchLinuxをサーバ用OSとして選択することは全くありえない選択では無いと思います.
ConoHaにインストール
ConoHaでは旧・新の両方ともArchLinuxを利用することが出来ます. ただ,まだ私の場合は旧ConoHaにクーポンが残っておりますので,今回はそちらを利用してArchLinuxのインストールを行いたいと思います. (旧ConoHaにクーポンが残っていて,そちらにArchLinuxをインストールして試してみたいという方も多いと思うので……)
もちろん,新ConoHaの手順も解説していこうと思います.
インストール
今回の目的はサーバとして最小限の役割をする単純なsshサーバを構築しましょう.
1.ArchLinuxのISOイメージから起動する
旧ConoHaの場合
適当なプランでひとまずCentOSで仮想マシンを作成します. 作成したら,仮想マシンのラベルをクリックし,開いた画面のその上のメニューから,ArchLinuxのISOイメージを選択します.
これですね.
こちらを選択すると,起動がArchISOから行われるようになります.
また,旧ConoHaではディスクが20GB + 80GBになってしまっているのでVMのメニューからVM設定を選択し,ディスクの構成変更を行います.
新ConoHaの場合
左側のメニューから,仮想マシンの追加を選び,仮想マシンを作成します.
新ConoHaでは新しい絵柄のこのはちゃんもいるので可愛いですね. 以下のところからArchLinuxを選択します.
ただ,このはちゃんが白で切れてしまうので,これを半透明とかにすればよりこのはちゃんが近くて良いかなぁと思います.
2.起動
今頃,32bitをArchLinuxを使っている人でわざわざ選択する必要が無いと思うので,64bitでブートします.
一番上の,Boot ArchLinux (x86_64)
を選択(Enter)して起動しましょう.
以下のような画面になるまで待ちましょう.
もし,他のLinuxをお使いの方はお気づきかもしれませんが,archisoではzsh + grml-zsh-config
がデフォルトで装備されています.
それではArchLinuxをインストールしていきましょう.
3. インストール
インストールはArchLinux公式ドキュメントのBeginners' guideを参照しながら以下の記事を読むと良いと思います.
3.0.インストールその前に (旧ConoHaのみ)
旧ConoHaは,旧ということでArchLinuxのインストールイメージがメンテナンスされていません.つまり何がいいたいかというと,異常にarchisoが古いです.2014-08-01のバージョンです.
あまりにも古い場合,以下のようなエラーで後述のpacstrapでパッケージのインストールに失敗します.
downloading required keys... :: Import PGP key 4096R/, "Seblu <seblu@seblu.net>", created: 2011-11-11? [Y/n] y error: key "Seblu <seblu@seblu.net>" could not be imported :: Import PGP key 2048R/, "Christian Hesse (Arch Linux Package Signing) <arch@eworm.de>", created: 2011-08-12? [Y/n] y error: key "Christian Hesse (Arch Linux Package Signing) <arch@eworm.de>" could not be imported :: Import PGP key 4096R/, "Antonio Rojas <arojas@us.es>", created: 2014-10-21? [Y/n] y error: key "Antonio Rojas <arojas@us.es>" could not be imported error: required key missing from keyring error: failed to commit transaction (unexpected error) Errors occurred, no packages were upgraded.
これは,パッケージの信頼性を検証するための署名が古すぎるために起きるトラブルです.
このスレでも述べられていますが,archlinux-keyring
の再インストールで回避することができます.
以下のコマンドを試してみてください.
# pacman -S archlinux-keyring # pacman-key --populate archlinux
(実はarchlinux-keyringをインストール時に,自動的にもうひとつのコマンドが実行されるので,本当は必要ないのですが今後どうなるかわからないため,一応記載しました)
3.1. パーティションを決める
今回は話をシンプルにするため,以下のようにしたいと思います.GPT/BIOSで構築を行います.
/dev/sda1 (100M)
: BIOS boot Part/dev/sda2 (その他全て)
: /
それでは,gdiskを用いて設定を行いましょう.
# gdisk /dev/vda GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if you don't want to convert your MBR partitions to GPT format! *************************************************************** Warning! Secondary partition table overlaps the last partition by 33 blocks! You will need to delete this partition or resize it in another utility. Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): y Command (? for help): n Partition number (1-128, default 1): First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +100M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): ef02 Changed type of partition to 'BIOS boot partition' Command (? for help): n Partition number (2-128, default 2): First sector (34-41943006, default = 206848) or {+-}size{KMGTP}: Last sector (206848-41943006, default = 41943006) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem' Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/vda. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully.
以上では以下のような操作をしていました.
- GPTでパーティションテーブル再度作成 (Command: o)
- BIOS boot partitionの作成 (Command: n -> Enter -> +100M -> ef02)
- /パーティションの作成 (Command: n -> Enter -> Enter -> Enter)
- パーテョンテーブルの書き込み
あとは大幅にパーティションテーブルを改変してしまったので,再起動してカーネルに現在のパーティションを再度認識してもらいましょう.
# reboot
3.2. SSHからの操作に変える
再起動を終えたら,今後の操作を楽にするためSSH経由でのインストールに変更します. 以下の操作を行います.
以下のコマンドを打ち込みます.
# passwd Enter new UNIX password: <パスワードを入力し,Enter> Retype new UNIX password:<再度パスワードを入力> passwd: password updated successfully # systemctl start sshd # ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether brd ff:ff:ff:ff:ff:ff inet brd 157.7.53.255 scope global eth0 valid_lft forever preferred_lft forever inet6 scope global noprefixroute dynamic valid_lft 1291898sec preferred_lft 82298sec inet6 scope link valid_lft forever preferred_lft forever inet6 scope link valid_lft forever preferred_lft forever
あとは,設定どおりにSSHに接続を行えば大丈夫です.
ちなみに,LinuxもしくはMacユーザならTerminalで以下のコマンドをSSHで入力すれば接続が可能です.
$ ssh root@<ConoHaサーバのIP>
3.3.新環境にパッケージをインストールする
ここから,ArchLinuxの基本システムとその他使うでしょというソフトウェアのインストールを行います.
……の前に,インストールの高速化のため日本のミラーサーバからのダウンロードを行います. お好きなエディタで,pacmanのmirrorサーバリストを開き,日本のサーバを最上位にコピペします. 私は,vim以外のエディタを知らないのでvimを用いて編集します.(旧ConoHaのarchisoではvimが無かったためviで編集)
# vi /etc/pacman.d/mirrorlist # head /etc/pacman.d/mirrorlist ## ## Arch Linux repository mirrorlist ## Sorted by mirror score from mirror status page ## Generated on 2014-08-01 ## Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch ## Score: 0.5, Germany Server = http://mirror.k42.ch/archlinux/$repo/os/$arch
それでは,ローカルにインストールしていきましょう.以下のような作業を行います.
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 559M 0 rom /run/archiso/bootmnt vda 254:0 0 100G 0 disk ├─vda1 254:1 0 100M 0 part └─vda2 254:2 0 19.9G 0 part loop0 7:0 0 241.3M 1 loop /run/archiso/sfs/airootfs loop1 7:1 0 32G 1 loop └─arch_airootfs 253:0 0 32G 0 dm / loop2 7:2 0 32G 0 loop └─arch_airootfs 253:0 0 32G 0 dm / # mkfs.ext4 /dev/vda2 Proceed anyway? (y,n) y # mount /dev/vda2 /mnt # pacstrap -i /mnt base base-devel vim zsh grml-zsh-config grub Enter a selection (default=all): <Enter> Enter a selection (default=all): <Enter> Total Download Size: 239.54 MiB Total Installed Size: 854.49 MiB :: Proceed with installation? [Y/n] y<Enter> ...skip
見やすさの都合上,必要最低限の場所以外は省略しました.これで,ArchLinuxが動作する最小環境(と,使いやすくする各種ツール郡)のインストールが行われます.
3.4.新環境へのchroot
ArchLinuxは自分で設定しない限り有効になりません.ですので,ブートの設定やパスワード等も自分で行わなければなりません.
現在インストールしただけでは,ブートも出来ないのでarch-chroot
と呼ばれるコマンドで新環境に入り設定を行っていきます.
ここでは以下のことを行います.
genfstab
でfstabの内容を生成するarch-chroot
コマンドで新環境に移動- システム全体のロケールの設定
- タイムゾーンの設定
- ハードウェアクロックの設定
- ホスト名の設定
- ネットワークの設定
- rootのパスワードを設定
- grub(ブートローダ)を設定
今回は動作が多いので,補足しながら説明します.
この章だけコマンドプロンプトをroot@archiso ~ #
と表現します.
・fstabの自動生成 root@archiso ~ # genfstab -p /mnt > /mnt/etc/fstab ・新環境に移動 root@archiso ~ # arch-chroot /mnt /bin/zsh ・ロケールの設定 root@archiso / # vim /etc/locale.gen <以下の箇所を変更> 163行目あたり #en_US.UTF-8 UTF-8 ↓(コメントを外す) en_US.UTF-8 UTF-8 288行目あたり #ja_JP.UTF-8 UTF-8 ↓(コメントを外す) ja_JP.UTF-8 UTF-8 root@archiso / # locale-gen Generating locales... en_US.UTF-8... done ja_JP.UTF-8... done Generation complete. root@archiso / # echo "LANG=ja_JP.UTF-8" > /etc/locale.conf ・タイムゾーンの設定 root@archiso / # ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ・ハードウェアクロックの設定 root@archiso / # hwclock --systohc --localtime ・ホスト名の設定,ここではホスト名を「conoha-chang-prpr」とする root@archiso / # echo "conoha-chang-prpr" > /etc/hostname ・ネットワークの設定,ConoHaではIPアドレスがDHCPで落ちてきてくれるので自動設定にする root@archiso / # systemctl enable dhcpcd ・rootのパスワードの設定 root@archiso / # passwd Enter new UNIX password: <パスワード入力してEnter> Retype new UNIX password: <再度パスワード入力してEnter> passwd: password updated successfully ・grubの設定 root@archiso / # grub-install --recheck /dev/vda Installing for i386-pc platform. Installation finished. No error reported. root@archiso / # grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-linux Found initrd image: /boot/initramfs-linux.img Found fallback initramfs image: /boot/initramfs-linux-fallback.img done
以上で,セットアップ完了です.
余談ですが,ハードウェアクロックの設定をArchLinuxが推奨しているutcではなくlocaltimeに設定している理由は,ConoHaのホストマシンの時刻設定との兼ね合いです. 非推奨で気持ち悪いかもしれませんが,今後もlocaltimeという設定は無くならないので,このように設定しましょう.
3.5.OpenSSHのインストール
それでは,一応今回の目的であるOpenSSHのインストールを行いましょう.
ArchLinuxではpacman
と呼ぼれる最強なパッケージマネージャによってパッケージが管理されています.
以下のように打ち込んでみましょう.
root@archiso / # pacman -S openssh error: failed to initialize alpm library (database is incorrect version: /var/lib/pacman/) error: try running pacman-db-upgrade
ああっと,忘れてました.pacman
のデータベースを初期化し,アップデートするのを忘れていました.
以下のコマンドを打ち込んでみてください.
・データベースのアップグレード 255 root@archiso / # pacman-db-upgrade ==> Pre-4.2 database format detected - upgrading... ・データベースの更新 root@archiso / # pacman -Syy :: Synchronizing package databases... core 121.2 KiB 148K/s 00:01 [######################################################################################################] 100% extra 1774.7 KiB 932K/s 00:02 [######################################################################################################] 100% community 3.1 MiB 1924K/s 00:02 [######################################################################################################] 100%
これで,大丈夫.再度打ち込んでみましょう.
root@archiso / # pacman -S openssh resolving dependencies... looking for conflicting packages... Packages (4) dnssec-anchors-20150403-1 ldns-1.6.17-3 libedit-20150325_3.1-2 openssh-7.1p1-1 Total Download Size: 1.19 MiB Total Installed Size: 6.21 MiB :: Proceed with installation? [Y/n] y :: Retrieving packages ... (省略) Optional dependencies for openssh xorg-xauth: X11 forwarding x11-ssh-askpass: input passphrase in X root@archiso / # vim /etc/ssh/sshd_config <今回は都合上以下を修正> (44行目辺り) #PermitRootLogin prohibit-password ↓以下のように修正 PermitRootLogin yes root@archiso / # systemctl enable sshd
今回は,再起動後にユーザを作成しようと考えているため,sshでrootのログインを許可しようと思います. 後で,必ず修正を行ってください.
ArchLinuxにおけるトラブルシューティングの半分くらいは,表示されたエラーメッセージを理解することで修正することが出来ます. なので,トラブルが発生したらまず一度エラーメッセージを確認しましょう.
3.6.chrootから脱出,再起動
それでは,chroot環境下から脱出して再起動しましょう.
root@archiso / # exit root@archiso ~ # umount -R /mnt root@archiso ~ # poweroff
再起動コマンドはreboot
ですが,poweroff
を利用しているところに注意してください.
これは,ConoHaにおいてISOイメージが残っている場合に再起動してもそのISOイメージからまたブートしてしまうためです.
(少なくとも,旧ConoHaの場合,新ConoHaは忘れちゃいました ;P)
ISOイメージを排出していることを確認したら,再度起動しましょう.旧ConoHaでは上のメニューから行えます. システムがシャットダウンしているなら,強制の方を選択しても構いません.
3.7.IYH
これで,インストールは完了です. OpenSSHの設定も行ったので,ちゃんとSSHで入れるかも確認しましょう.
$ ssh root@<ConoHaサーバのIP>
3.8. インストールのその後
一応,ここまででインストールが完了しました.が,流石にこれでは使い物にならないので,更に最低限これくらいは……という設定を行います.
・ユーザの追加 [root@conoha-chang-prpr ~]# useradd -m -g users -G wheel -s /bin/zsh nomuken ・作成したユーザのパスワードを変更 [root@conoha-chang-prpr ~]# passwd nomuken 新しい UNIX パスワードを入力してください: <パスワードを入力してEnter> 新しい UNIX パスワードを再入力してください: <再度パスワードを入力してEnter> passwd: パスワードは正しく更新されました ・sudoを使えるようにする [root@conoha-chang-prpr ~]# visudo <以下を編集> (82行目あたり) # %wheel ALL=(ALL) ALL ↓(コメントを外す) %wheel ALL=(ALL) ALL ・nomukenユーザに切り替える [root@conoha-chang-prpr ~]# su nomuken /etc/zsh/zshrc:cd:1630: 許可がありません: /root ・sshの鍵をインストールする nomuken@conoha-chang-prpr ~ % mkdir .ssh nomuken@conoha-chang-prpr ~ % curl https://github.com/nomuken.keys > .ssh/authorized_keys % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 381 0 381 0 0 459 0 --:--:-- --:--:-- --:--:-- 463 nomuken@conoha-chang-prpr ~ % chmod 700 -R .ssh ・sshの設定を正しく設定する nomuken@conoha-chang-prpr ~ % sudo vim /etc/ssh/sshd_config [sudo] nomuken のパスワード: <nomukenのパスワードを入力してEnter> <以下を編集> (44行目辺り) PermitRootLogin yes ↓以下のように修正 PermitRootLogin no (72行目辺り) #PasswordAuthentication yes ↓以下のように修正 PasswordAuthentication no nomuken@conoha-chang-prpr ~ % sudo systemctl restart sshd
以上で設定は,完了ですお疲れ様でした!!
まとめ
ArchLinuxのインストールいかがだったでしょうか?おそらく相当面倒くさく,時間もかかったものと思います. 最後に,私が何故ArchLinuxをサーバで利用しているかポエムを書いて終わりたいと思います.
ArchLinuxは何度も言うように,自分で設定しないと,何も動かない性質を持つディストリビューションです. 他のLinuxでは,インストールした瞬間に「よくある設定」がなされ,それがデーモンとして動くものなら「即座に有効化され起動」します. 個人的に,この挙動はあまり好きではありません.何故ならばそのよくある設定が自分の環境に適するものであるとは限らないからです.
ArchLinuxでは,面倒くさく,相当量調べることを要求されることとなりますが,ユーザに本当の意味でのコントロールが与えられます. そういう意味でも,個人的にセキュアなOSだと思っています.
ともあれ,お疲れ様でした.以上でConoHaアドベントカレンダー13日目の記事とさせていただきます.ありがとうございました.
P.S. このはちゃん,遅くなってごめんなさい