セットアップ:Windows10 pro と Hyper-V と Arch Linux、そして Ansible

Windows8以降、pro版には Hyper-V が付くようになりました。
エンジニアとしては、Linux/Unix を侍らせてなんぼのもの…というわけで、このHyper-V 上に開発用の環境を作りました。
パッケージの新しさに定評のある Arch Linuxを使用し、Ansible が実行できる所まで環境を作ってみました。

Arch Linux は色々な構成方法があるのですが、今回は BIOS/MBR/GRUB 構成とします。
Hyper-V の第2世代仮想マシンでUEFIを使ってみたいですが…かなり難易度高そうなので、今回は無難な上記構成にしました。

なお、Arch Linux はいきなりセットアップ方法が変わったりするので、いつまでこの方法が有効かはわかりません(笑)
(想定ISO: archlinux-2015.09.01-dual.iso)

インストール

まずは、第一世代の仮想マシンを作成し、適当にリソースを割り振って、Arch Linux の ISO からブートさせます。なお、ネットワークは、外部仮想SWにつなげました。
(この辺りは説明割愛)

Arch Linux はちまちまコマンドを打ちながら環境構築するので、以下、地道にタイプしていきます。

# キー配列を設定
loadkeys jp106

# ディスクのパーティションを設定
# --------------
# 今回は下記の構成に設定(nコマンド):
# /dev/sda1 -> 512MB (/boot)
# /dev/sda2 -> 8GB (swap)
# /dev/sda3 -> 10GB (/)
# /dev/sda4 -> 拡張パーティション
# /dev/sda5 -> 残り全部 (/home)
# 追加の作業:
# aコマンドで、sda1 に Bootフラグを設定。
# t コマンドで sda2 を swap に設定(コード 82)
# wコマンドで変更を書き込む
# --------------
fdisk /dev/sda

# ディスクのフォーマット
mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda5
mkswap /dev/sda2
swapon /dev/sda2

# ディスクをマウント( /mnt をルートに見立てる)
mount /dev/sda3 /mnt
mkdir /mnt/boot
mkdir /mnt/home
mount /dev/sda1 /mnt/boot
mount /dev/sda5 /mnt/home

# 日本のミラーをトップにする
vim /etc/pacman.d/mirrorlist

# 基本のシステムと他必要なモノをインストール
# openssh と python2 を入れてAnsibleで操作できるようにしておく。
# intel-ucode は IntelCPU用 (Hyper-Vの場合、効くのだろうか?)
pacstrap /mnt base intel-ucode grub openssh python2

# fstabの 作成(ディスクの特定にUUIDを使用する)
genfstab -U -p /mnt > /mnt/etc/fstab

# 使用するロケールを有効にする
# ------------------------------
# en_US.UTF UTF-8 と ja_JP.UTF UTF-8 あたりの
# コメントアウトを解除する
# ------------------------------
vim /mnt/etc/locale.gen

# 使用するロケールを設定ファイルに書く
# 日本語を表示できる環境が整うまではenにしておいてもいいが、
# インストール後は SSHでつなぐ前提なので、いきなり日本語にする。
echo LANG=ja_JP.UTF-8 > /mnt/etc/locale.conf

# ホスト名を設定する
echo archtest >  /mnt/etc/hostname

# SSHでrootによるパスワードログインを有効にする
# ----------------------------
## root にパスワードログインできるようにする
## PermitRootLogin prohibit-password
#PermitRootLogin yes
#----------------------------
vim /mnt/etc/ssh/sshd_config

# 固定IP設定
cp /mnt/etc/netctl/examples/ethernet-static /mnt/etc/netctl/eth0
# ----------------------------
# 所属するネットワークに合わせて書き換える
# ----------------------------
vim /mnt/etc/netctl/eth0

# キーマップを設定する
echo KEYMAP=jp106 > /mnt/etc/vconsole.conf

# コマンド呼び出したり、シンボリックリンクを
# 貼ったりする作業はchroot して行う
arch-chroot /mnt

# (固定IPを有効化)
netctl enable eth0

# SSHを使用できるようにする
systemctl enable sshd.service

# ロケールを生成
locale-gen

# タイムゾーンの設定
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
hwclock --systohc --utc

# ブートローダ(grub) のインストール
grub-install --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

# Root パスワード設定
passwd

# あとは再起動
exit
reboot

実験

インストールができたら、実験してみます。

先ほどインストールしたマシンのIPアドレスは 192.168.11.100 とします。
ここに、Cygwin (on Windows 10)からアクセスします。

ssh root@192.168.11.100

はい、ここは問題なくつながりますね。
では、Ansibleは如何でしょう?

# 適当なディレクトリに移動して…
echo 192.168.11.100 > hosts
ansible all -i hosts -u root --ask-pass -c paramiko -m shell -a "echo Hello Ansible"

はい、ここも問題…ありますね。/usr/bin/python が無いって怒られます。
Ansibleは接続先のPython 2.7 を使います。初期設定だと決め打ちのパスを見に行くのですが、Arch Linux の Python2 のインストール先がAnsibleが想定している場所ではないため、エラーが起きています。

というわけで、変数 ansible_python_interpreter を設定してあげます。

echo 192.168.11.100 > hosts
ansible all -i hosts -u root --ask-pass -c paramiko -e "ansible_python_interpreter=python2" -m shell -a "echo Hello Ansible"

はい、今度はちゃんと動きました!

長かった…やっとここまで…。あとは、まじめにAnsibleのレシピを描いてあげれば快適な開発環境ができる…ハズ!

俺…開発環境が出来上がったら、焼き肉食べに行くんだ…。

余談

Hyper-V上に開発環境を作ろうと思った際に、まずはOS選定から始めました。

少し前まで FreeBSD でサーバを立てていたので、FreeBSD にしようかなとも思ったのですが…昨今の技術(Docker とか 他色々)を試そうと思うと、Linux の方が都合が良いので、FreeBSDは却下にしました。

元々 FreeBSD を使っていた理由は、初期構成が本当に最低限ですっきりしている、そしてパッケージが新しく、かつバイナリがちゃんと提供されるからでした。 Linux で条件を満たすものがあるかというと…CentOSは論外として、Debian もパッケージが古いし、Ubuntu も満足行く新しさじゃない…であれば、Gentoo ? いやいやいちいちビルドなんてしてられないよ! …そうしてやっぱ FreeBSD かなーと頭をよぎった時に、ふと目にした Arch Linux。

これだ、と思いました。
常に提供される新しいパッケージ…初期状態では本当に何も入っておらず、自分で環境を構築できる、まさに求めていたLinuxだと、その時は思ってました。…ええ、その時は。

まずは、Arch Linux のISOイメージを入手。ちょっとサイトが分かりにくかったですが、難なくGETしました。
そして、起動。

うん、コンソールが開きました。

・・・で?

・・・(´・ω・`)

とりあえず、インストーラの起動の仕方をぐーぐる先生に聞いてみたのですが…

答えは 「そんなものねぇ」 ・・・でした。

なるほど、インストール作業から自分で打てと。

こりゃ、トンデモナイものに手を出したなと思いましたが、同時に燃えるものがありました。

そして、試行錯誤すること1.5日…

何度か Ubuntuで妥協しようと思いましたが…なんとか今回のレシピに至りました。

追記

「error: <パッケージ名>: signature from “<メールアドレス>” is unknown trust」
インストール中にこんなメッセージが出ることがあります(というか、よく出る?)。
パッケージの妥当性を検証するために、ダウンロードしたパッケージの署名を確認しているのですが、自身が持ってる信頼できる署名リストが古いために、このようなエラーとなります。
解決策として、知らない署名もすべて信じる(設定ファイルで TrustAll と叫ぶ)という手もあるのですが、それは流石に微妙です。じゃあ、毎回新鮮なインストールDiskを用意する?…流石にそれは面倒。

rm -rf /etc/pacman.d/gnupg/*
pacman-key --init
pacman-key --populate archlinux

順当に考えれば、署名リストを更新すべきですよね? ということで手順はこちらです。

Arch Linux についての初心者向けの情報が少ないので、調べるのに一苦労です… orz
慣れた人にとってはこの程度朝飯前なんだろうなぁ。

コメント

  1. […] Arch-Linux インストーラ (前の記事で書いた手順をスクリプト化したもの) […]

タイトルとURLをコピーしました