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
慣れた人にとってはこの程度朝飯前なんだろうなぁ。
コメント
[…] Arch-Linux インストーラ (前の記事で書いた手順をスクリプト化したもの) […]