環境構築

2012年11月01日

このエントリーをはてなブックマークに追加

複数ディストリビューション対応へ向けて

ギーク達はfedora対応を希望

前回のエントリに反応してくれたギーク達は、CentOSよりもfedora対応を希望していた。『fedora対応…!』と思ったけども、fedoraを使ってないので良くわかってない。それよりは、複数ディストリビューション対応への準備体操として、CentOS 5対応に着手してみた。

検証環境

インストール
$ git clone git://github.com/hansode/vmbuilder.git
実行方法
$ cd vmbuilder/kvm/rhel/6/
$ sudo ./vmbuilder.sh --distro-name=**centos** --distro-ver=**5**

実行してから約10分程度で実行したディレクトリ直下に仮想マシンイメージが作成される。

2012/11/01現在の対応ディストリビューション

distro-name と distro-ver に指定可能な組み合わせは下記の通り。

  • centos 5 (5.x)
  • centos 6 (6.x)
  • sl 6 (6.x)

新規追加されるタイミングは、今の所、自分が欲しいと思う時か、聞こえて来る周りからの声。

問題点

rhel6環境でrhel5を構築すると、仮想マシンイメージを作成可能ではあるが、rhel5環境としては不完全だ。

  • 今のvmbuilder.shの仕様では、ホスト環境のyumコマンドでゲスト環境を構築する
  • ゲスト環境におけるrpmdbのフォーマットは、ホスト環境に依存する

個人的に困ってないので、しばらくの間は保留扱い。

改善案

検証すべき項目

  • ホスト環境とゲスト環境を一致させる
    • 例) rhel5用仮想マシンイメージを構築する場合は、rhel5環境で行う
  1. post installフェーズで、rpmdbを変換するなどの対応をする
  2. yumコマンドかyum.confにrpmdbのバージョン指定する方法があれば、指定してみる

上記のうち、 1 が良さそうなので、対応手段は、構築フェーズを分ける事だろうか。

  1. ゴールとなる仮想マシンをビルドする為のビルド環境(1次chroot環境) を構築
  2. 構築されたビルド環境(1次chroot環境)にて、ゲスト環境(2次chroot環境)を構築
  3. ホスト環境にてマシンイメージ化

これで対応出来そうな気がするので、あとは検証・実装するだけの事。この辺をしっかり実装しておかないと、fedora対応も大変そう。

あとがき

環境差異が発生するとは面白い事。

フィードバックなど

希望するネタ等、フィードバック、大歓迎です。

続きを読む


編集
@hansode at 13:30|PermalinkComments(0)TrackBack(0)

2011年10月31日

このエントリーをはてなブックマークに追加

rabbitmq-serverをrpmでインストールしたい

tar ballからビルドするのか、可能な限りrpmで統一するのか。 これらはインストール対象やポリシーに依存するので、何が最善策かは場合による。 個人的には、可能な限りrpmで管理しておきたい。rpmが用意されていれば、更にその意思は硬くなる。

今回、rabbitmq-serverが必要となった。 rabbitmq-serverは、rabbitmqがrpmを提供している。rabbitmq-serverはerlangで書かれているので、erlangに依存する。 erlangのrpmは、EPELから取得可能となっている。

以上を踏まえ、今回はrpmで環境構築する事にした。

インターネット非接続環境へのインストール作業

本エントリは、インターネット非接続サーバ上にRuby開発環境を構築する(Red Hat Enterprise Linux 6編)に関連している。今回もインターネット非接続サーバへのインストール作業。

rabbitmq-serverをインターネット非接続環境にインストールする手順を下記にまとめた。

検証環境
  • Ubuntu Server 10.04.3 LTS
  • RHEL Server 6.0 x86_64
  • GNU Wget 1.12
特筆事項
  • 作業対象サーバは、インターネット非接続
作業概要
  • 事前作業(インターネット接続ノード) / Ubuntu
    • ローカルepelリポジトリツリーを作成
    • epelのrpmをダウンロード
    • rabbitmq-serverのrpmをダウンロード
  • 本作業(インターネット非接続ノード) / RHEL
    • epel
      • epelのrpmをインストール
      • ローカルepelリポジトリ用に設定変更
      • ローカルepelリポジトリツリーを配置
    • erlangをインストール
    • rabbitmq-serverをインストール
作業内容:インターネット接続ノード編

インターネット非接続ノードに環境構築する為の準備作業を、インターネット接続ノードで行なっておく。

rpmをダウンロード

今回のrabbitmq-serverは最新版ではなく、1.8.1を利用。 もしも、最新版を使いたい場合は、最新版のrpmをダウンロードしても問題無い。

epelミラー作成(erlang関連パッケージのみ)

今回はerlang関連のパッケージのみ、ダウンロード対象にしている。

仮にepelのミラーを作成しようとすると、数G単位のディスク容量を必要とし、ダウンロードに要する時間は長い。 今回はerlangだけで良いので、完全なepelミラーは不要。

erlang関連パッケージは、「erlang-*」と 「wx*」で絞り込みが可能。 この絞り込み条件を利用し、必要パッケージ一覧作成の上、ファイルをダウンロードまで行うスクリプトをgistに登録した。

上記スクリプトを実行すると、 カレントディレクトリ直下に download.fedora.redhat.com/pub/epel/6/x86_64/*.rpm としてrpmがダウンロードされて行く。

mirror-epel.shとして保存し、実行する。


$ bash -x ./mirror-epel.sh
$ tar zcvf download.fedora.redhat.com.tar.gz download.fedora.redhat.com

download.fedora.redhat.com.tar.gz が出来上がる。

作業内容:インターネット非接続ノード編

インターネット接続ノードでダウンロードしたファイルを、実作業対象となるインターネット非接続ノードへファイルをアップロードする。この手順は、どうにかしてアップロードするとしか言いようがない。

それぞれ、/tmp/ に配置されるものとする。

epelをインストール

# rpm -ivh /tmp/epel-release-6-5.noarch.rpm
epelローカルリポジトリ設定

/home/mirror/archive/ 以下に配置するものとする


# mkdir -p /home/mirror/archive/
# tar zxvf download.fedora.redhat.com.tar.gz -C /home/mirror/archive/

baseurlを/home/mirror/archive/ に変更する


# cat <<EOS > /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=file:///home/mirror/archive/download.fedora.redhat.com/pub/epel/6/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
EOS
erlangとrabbitmq-serverをインストール

# yum install -y erlang
# rpm -ivh /tmp/rabbitmq-server-1.8.1-1.noarch.rpm

本手順でrabbitmq-serverをインストール可能。

あとがき

時にはインターネット非接続ノードで戦う術も必要か。

続きを読む


編集
@hansode at 14:30|PermalinkComments(0)TrackBack(0)

2011年10月28日

このエントリーをはてなブックマークに追加

不慣れなRHELと、インターネット非接続と

インターネット非接続RHELサーバに、Rubyで作られたアプリケーション(Wakame-VDC)をインストールする必要があった。

手元にはRHEL環境が無かったので、RHEL互換であるはずのCentOS上にRuby開発環境を構築。 CentOSでは苦労する事なくruby環境を構築出来たので、RHELでも同様に問題ないだろう・・・そう思っていた。 作業対象のRHELで問題に遭遇。

ruby-develが見つからない

RHELのインストールDVDの中身を確認してみても、ruby-develが存在しない。何故・・・? その理由は、ruby-develがextrasに所属している事だった。 RHELのインストールDVDに収録されているのは、baseパッケージ。見つからなくて当然の結果だった。

一般手順と例外手順

理由が判明し、extrasパッケージをインストール対象に追加する方法を調査してみると、少なくとも2つの方法が存在していた。

上記2つの手順は、インターネット接続された環境用。今回の作業環境は、インターネット非接続環境。一般的な手順で済む話ではない。下記にインターネット非接続向け手順をまとめた。

検証環境
  • RHEL Server 6.0 x86_64
特筆事項
  • 作業対象サーバは、インターネット非接続
作業概要
  1. Red Hat Network(RHN)より関連rpmをダウンロード
  2. 対象サーバへアップロード
  3. パッケージをインストール
前提条件
  • Red Hat Networkアカウントを持ってる事。
    これは、RHELを使う時点でアカウント取得済みであるはず。
作業内容
  1. ruby, ruby-libsをインストール。これらはインストールDVDに含まれているので、yumコマンドで解決。
    $ sudo yum install ruby ruby-libs
  2. extras所属のパッケージをRHNからダウンロード。rpmは、ページ下部の"Download Package"から辿れる。 ※i686用のrpmも存在するので、i686用ページからダウンロード可能。
  3. どうにかして、rpmを対象サーバへ配布(例えば、USBメモリを利用)
  4. rpmをインストール
    $ sudo rpm -ivh /path/to/ruby*.rpm
あとがき

RHELとCentOSの違いを意識する事。

続きを読む


編集
@hansode at 16:30|PermalinkComments(0)TrackBack(0)

2011年08月18日

このエントリーをはてなブックマークに追加

OSインストール直後にパッケージを追加インストールしようとした

外界への通信は可能だ。はてさて。

検証環境
  • OpenSolaris snv_134

$ pfexec pkg install [package]
pkg: 0/1 catalogs successfully updated:

Unable to contact valid package server
Encountered the following error(s):
Unable to contact any configured publishers. This is likely a network configuration problem.
原因
  • hostエントリの名前解決対象にDNSが無かったから
対応方法
  • /etc/nsswitch.confを修正
  • hostエントリに"dns"を追加

$ pfexec vi /etc/nsswitch.conf
< hosts:        files
> hosts:        files dns

$ pfexec pkg install [package]

これで無事にパッケージインストール出来るようなった。

あと書き

きっと、OSインストール後の必須作業なのだろう。

続きを読む


編集
@hansode at 21:00|PermalinkComments(0)TrackBack(0)

2011年07月16日

このエントリーをはてなブックマークに追加

日付
2011/07/15
場所
ミシシッピ州オックスフォード
天気
晴れ

月に照らされて

こちらの金曜の夜は、日本時間の土曜日。普段オンラインになっている東京メンバーにとってはオフの日。 東京からの連絡が来ないので、自分の作業に集中出来る特別な作業日でもある。

この日は、先日リリースされた「Wakame-VDC 11.06」のインストールを簡略化作業に没頭した。リリースされるまでの一ヶ月以上前から自分はアメリカに来てて、リリース作業には関わってなかったので、大半の新機能を試してなく、知らない事が多々増えていた。

何かを動かす為の設定が足りなく、対応しては、新たな何かが足りない。その繰り返し。 結局、その日のうちにハイパーバイザータイプとしてLXCを選択した環境構築が終わらなかった。 LXCを担当したメンバー以外にLXC仕様インスタンスを起動した実績が無かった。そして、東京メンバーは3連休。連休明けまでに自分がどうにかして環境構築に成功するか、成功せず、連休明けに聞く事になるのか。 さて、どうなるか。

これらは構築手順書が無いと言う、悲しい現実に直面している訳でもある。 何故手順が無いのか、単に表に出てないだけなのか、この辺を担当メンバーに改めて問い詰め、 手順をしっかり残すような習慣をつけてもらうしかない。





編集
@hansode at 10:30|PermalinkComments(0)TrackBack(0)

2011年06月16日

このエントリーをはてなブックマークに追加

日付
2011/06/15
場所
ミシシッピ州オックスフォード
天気
晴れ

PS3 カメラ固定化

カメラが安定しないのでマジックテープでカメラを固定。 日本では通称「マジックテープ」で通じるモノは、アメリカだと「velcro」だそうな。 調べてみると、どちらも商標。

テレビ上部中央とPS3カメラの底に、それぞれvelcroを貼りつけて終わり。


無線LAN装置を固定

暫定的に柱の根元に置いてあった無線LAN装置を柱上部に取付作業。久々にハシゴを使う作業。 ほぼ毎日身体を動かしてたので分からなかったが、座って作業しているだけだと部屋の中が寒い。 暑がり&薄着の自分が寒く感じるのだから、かなりの冷え具合。

LANケーブルをオフィスのスイッチエリアから、もう1本LANケーブルを配線。もう開けないと思っていた天井パネルを開ける作業から始まる。

壁にガンガン穴を空ける事に慣れて来た。無線LAN装置を取り付けるためのネジを壁に埋め込み、真上にLANケーブルを覗かせる。

オフィスの無線LAN環境が整った。 日本だったなら、いかにして壁に穴を開けず、傷を付けずに固定するかが課題だ。 この手作り感たっぷりのオフィス環境構築がとても楽しい。


壁掛けTV周辺整理

暫定的にプリンタの箱を棚として代用してPS3を置いていたので、改善すべく棚を設置。 これもまた、壁にガンガン穴を開けて環境構築。

壁掛けの棚を設置し、PS3を配置。不安定だったPS3が安定した。

電源の供給源等、まだ整える必要がある。手作りオフィス環境構築は、まだまだ続くのであった。




編集
@hansode at 10:30|PermalinkComments(0)TrackBack(0)

2011年02月01日

このエントリーをはてなブックマークに追加

RubyGems 1.3.5は既に古い

  • RubyGemsパッケージのBundlerなどはRubyGems-1.3.6以上で動作する。
  • Ubuntu-10.04にパッケージングされているrubygemsは1.3.5であり、都合が悪い。

そこで今回はUbuntu-10.04にrubygems-1.3.6以上をインストールする。

検証環境
  • Ubuntu 10.04.1 LTS Server
▼要件定義
  • RubyGems-1.3.6以上をインストール
  • Ubuntu maverickにはrubygems-1.3.7系が存在するので、maverickのrubygemsパッケージを利用出来るように設定
  • rubygemsを除いたパッケージは、lucidのパッケージを継続

作業前状態確認

pinの設定確認
$ apt-cache policy rubygems
rubygems:
  Installed: (none)
  Candidate: 1.3.5-1ubuntu2
  Version table:
     1.3.5-1ubuntu2 0
        990 http://jp.archive.ubuntu.com/ubuntu/ lucid/universe Packages

作業前のrubygemsパッケージのpin設定を確認。

事前準備

maverickのパッケージを扱う為の設定作業を行なう。

デフォルトリリースをlucidの物とする

※ファイルは新規作成

$ sudo vi /etc/apt/apt.conf.d/99default-release
APT::Default-Release "lucid";
pin設定:全パッケージ編

※ファイルは新規作成

$ sudo vi /etc/apt/preferences.d/00default
Package: *
Pin: release a=lucid
Pin-Priority: 1

特に指定がない限り、lucidが対象となる

pin設定:rubygems編

※ファイルは新規作成

$ sudo vi /etc/apt/preferences.d/99rubygems
Package: rubygems, rubygems1.8
Pin: release a=maverick
Pin-Priority: 1001

rubygems関連パッケージは、maverickのパッケージを対象とする

nuttyのapt-lineを追加

※ファイルは新規作成

$ sudo vi /etc/apt/sources.list.d/ubuntu-maverick.list
deb http://jp.archive.ubuntu.com/ubuntu/ maverick main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ maverick multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ maverick universe

設定反映

事前準備の設定を反映し、変化を確認する。

ローカルaptキャッシュを更新
$ sudo apt-get update
pinの設定確認
rubygems:
  Installed: (none)
  Candidate: 1.3.5-1ubuntu2
  Version table:
     1.3.7-2 0
        500 http://jp.archive.ubuntu.com/ubuntu/ maverick/universe Packages
     1.3.5-1ubuntu2 0
        990 http://jp.archive.ubuntu.com/ubuntu/ lucid/universe Packages

Virsion tableフィールドにmaverickのpuppetが追加されている事を確認。

作業内容

rubygems関連パッケージはmavericをインストールする。

インストール時には、「パッケージ名/maverick」を指定する。
省略した場合は、lucidのパッケージがインストールされる。

インストール
$ sudo apt-get install rubygems/maverick rubygems1.8/maverick
インストール状況を確認
$ dpkg -l |grep rubygems
ii  rubygems 1.3.7-2  package management framework for Ruby librar
ii  rubygems1.8 1.3.7-2 package management framework for Ruby librar
gemのバージョンを確認
$ gem -v
1.3.7



編集
@hansode at 11:50|PermalinkComments(0)TrackBack(0)

2011年01月07日

このエントリーをはてなブックマークに追加

ちょっとした検証環境を構築したい

早い話が、OpenStack環境構築手順を確認したくて取った手段。

物理ノード内の既存システムを保存しておきつつ、検証を行いたい場合には丁度良い。
物理ノードを使うメリットは、メモリ容量が多いこと。

▼検証環境

  • Ubuntu 10.04.1 LTS Desktop
  • Windows 7 Professional(32bits)

作業内容

手元のWindows 7マシンでUSBメモリにUbuntuをインストールする。
手順は、「Get Ubuntu Desktop Edition Download」の「Burn your CD or create a USB drive」に詳細が書かれている。

簡単にまとめると、

  • Universal USB Installerをダウンロード
  • Universal USB Installeを使用し、USBメモリにUbuntu Desktop Editionをインストール

凄く簡単にUSBメモリにUbuntu Desktopをインストール可能だ。
あらかじめISOイメージをダウンロードしておけば、USBメモリへのインストール作業は5分程度で完了する。

後は物理ノードにUSBメモリを挿し込み、USBメモリからブートさせれば良い。




編集
@hansode at 15:20|PermalinkComments(0)TrackBack(0)

2011年01月05日

このエントリーをはてなブックマークに追加

きっかけはnova(OpenStack)環境構築

▼検証環境

  • Ubuntu 10.04.1 LTS Desktop
  • USBメモリ

nova.sh installを実行したら、エラーが発生
lvm2が依存するinitramfs-toolsのインストールに失敗していた。

▼説明の為、lvm2の部分だけ再現。


$ sudo apt-get -y install lvm2
.....
Setting up watershed (5) ...
update-initramfs: deferring update (trigger activated)
gzip: /initrd.img.gz: No such file or directory
cp: cannot stat `/vmlinuz': No such file or directory
dpkg: error processing watershed (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of lvm2:
 lvm2 depends on watershed (>= 2); however:
  Package watershed is not configured yet.
dpkg: error processing lvm2 (--configure):
 dependency problems - leaving unconfigured
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
No apport report written because the error message indicates its a followup error from a previous failure.
                          Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.32-24-generic
cp: cannot stat `/vmlinuz': No such file or directory
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 watershed
 lvm2
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

/vmlinuzが無いと言われている。

一見、/vmlinuzが存在しているようにみえているが、実態はシンボリックリンク先。
つまり、シンボリックリンク元が存在しない訳だ。


$ ls -la /vmlinuz
lrwxrwxrwx 1 root root 30 2010-08-16 10:07 /vmlinuz -> boot/vmlinuz-2.6.32-24-generic

解決策はシンボリックリンクを張り直す

update-initramfs: deferring update (trigger activated) / cp: cannot stat `/vmlinuz': No such file or directory』より


$ sudo ln -sf /cdrom/casper/vmlinuz /vmlinuz
$ ls -la /vmlinuz
lrwxrwxrwx 1 root root 21 2011-01-05 07:47 /vmlinuz -> /cdrom/casper/vmlinuz

この手順に従えばinitramfs-toolsのインストールは成功する。
そして、novaのインストールにも成功するようになる。

目出度し。




編集
@hansode at 16:10|PermalinkComments(0)TrackBack(0)

2010年12月02日

このエントリーをはてなブックマークに追加

Native ZFS for Linux』を検証してみたい

fuse版『zfs-fuse』ではなく、Linuxカーネルモジュール版『Native ZFS for Linux』が利用可能になった。
まずは、LinuxにZFS環境を構築して行く。


▼検証環境

  • Ubuntu 10.04.1 LTS
  • Linux 2.6.35-22-server
ビルド前チェック
  1. ビルドに必要なパッケージはインストールされているか
    
    $ sudo apt-get -y install git-core gawk dpkg-dev alien uuid-dev zlib1g zlib1g-dev
    
    必要に応じてインストールする
  2. カーネルヘッダーモジュールはインストールされているか
    
    $ uname -r
    2.6.32-24-server
    $ dpkg -l | grep `uname -r` | grep header
    ii  linux-headers-2.6.32-24-server 2.6.32-24.39 Linux kernel headers for version 2.6.32 on x
    
  3. ビルド用カーネルバージョンと起動中カーネルバージョンは同じか
    
    $ dpkg -l | grep `uname -r` | grep header
    ii  linux-headers-2.6.32-24-server 2.6.32-24.39 Linux kernel headers for version 2.6.32 on x
    

Native ZFS on Linux環境構築

嬉しい事に、debパッケージが生成されるようになっている。
RHEL系であればrpmパッケージが生成されるようだ。

▼ZFSが依存するSPL(Solaris Porting Layer)


$ git clone git://github.com/behlendorf/spl.git
$ cd spl
$ ./configure
$ make pkg
$ make
$ cd ..

make pkgの後にmakeを実行しているのは、後述のZFS構築時にシンボルが必要となる為。
make pkgでは、cleanされた状態になるのでシンボルが削除されてしまう。

▼ZFS


$ git clone git://github.com/behlendorf/zfs.git
$ cd zfs
$ ./configure --with-spl=`pwd`/../spl/
$ make pkg
$ cd ..

▼パッケージをインストール

生成されたdebパッケージは下記の通り。


$ ls -1 */*.deb
spl/spl_0.5.2-2_amd64.deb
spl/spl-modules_0.5.2-2_amd64.deb
spl/spl-modules-devel_0.5.2-2_amd64.deb
zfs/zfs_0.5.2-2_amd64.deb
zfs/zfs-devel_0.5.2-2_amd64.deb
zfs/zfs-modules_0.5.2-2_amd64.deb
zfs/zfs-modules-devel_0.5.2-2_amd64.deb
zfs/zfs-test_0.5.2-2_amd64.deb

パッケージをインストールする。


$ sudo dpkg -i spl/*.deb
$ sudo dpkg -i zfs/*.deb

パッケージの内容と状態を確認。今回は「0.5.2-2」となっている。


$ dpkg -l |grep zfs
ii  zfs                 0.5.2-2   ZFS Library and Utils
ii  zfs-devel           0.5.2-2   ZFS File System User Headers
ii  zfs-modules         0.5.2-2   ZFS File System
ii  zfs-modules-devel   0.5.2-2   ZFS File System Headers and Symbols
ii  zfs-test            0.5.2-2   ZFS File System Test Infrastructure

ZFS有効化

▼modprobeでモジュールを組み込む


$ sudo modprobe zfs

▼lsmodでモジュールの状態を確認


$ lsmod |grep zfs
zfs                   862477  0
zcommon                40316  1 zfs
znvpair                47453  2 zfs,zcommon
zavl                    6891  1 zfs
zlib_deflate           21834  1 zfs
zunicode              323374  1 zfs
spl                   106714  5 zfs,zcommon,znvpair,zavl,zunicode

これで無事にzfsが認識された。

▼zfsコマンド, zpoolコマンドを実行確認


$ sudo zfs list
no datasets available

$ sudo zpool list
no pools available

エラーが出ないことを確認出来た。
後はプールを作成するなり、ファイルシステムを作成するなり、可能状態。

検証準備は完了。次回へ続く…?

続きを読む


編集
@hansode at 15:05|PermalinkComments(0)TrackBack(0)