CentOS6.Xに X windows を追加

2 12月

# yum –disablerepo=* –enablerepo=idc* -c http://172.20.0.240/sl/63/20121219/repo/mwex-172.20.repo groupinstall “X Window System” “Desktop” “General Purpose Desktop”

自分のマシンではXが起動するも、キーボード、マウスとも受付ない。

つまり、ctrl-alt-FXすら使用できない・・・・・

 

haldaemon が停止してたからでした・・・

# chkconfig messagebus on

# chkconfig haldaemon on

# /etc/init.d/messagebus start

# /etc/init.d/haldaemonstart

# startx

 

OK!

kvmで ddイメージの容量を減らす

5 4月

ddイメージだと減少ができないみたい。

なので 少ない dd イメージを作成して(lvmなどの構成を同じにする)、そこに dump restoreする感じ。

————————————————————————————-
50G を 30G へ
————————————————————————————-
losetup -f
losetup /dev/loop0 sl63base50G.img
kpartx -a /dev/loop0
lvchange -ay /dev/vgx/root
lvchange -ay /dev/vgx/home
mkdir -p /tmp/root/boot /tmp/root/root /tmp/root/home
mount /dev/vgx/root /tmp/root/root
mount /dev/mapper/loop0p1 /tmp/root/boot
mount /dev/vgx/home /tmp/root/home

dump -0uf – /tmp/root/root | gzip -c > /home/vmdata/bk/sl63base-root.gz
dump -0uf – /tmp/root/home | gzip -c > /home/vmdata/bk/sl63base-home.gz
dump -0uf – /tmp/root/boot | gzip -c > /home/vmdata/bk/sl63base-boot.gz

umount /tmp/root/boot/
umount /tmp/root/home/
umount /tmp/root/root

lvchange -an /dev/vgx/root
lvchange -an /dev/vgx/home

kpartx -d /dev/loop0
losetup -d /dev/loop0

————————————————————————————-
30Gのddイメージを作成してOSを導入しておく
dd if=/dev/zero of=sl63base.img bs=1M count=30000
————————————————————————————-
losetup -f
losetup /dev/loop0 sl63base.img
kpartx -a /dev/loop0
lvchange -ay /dev/vgx/root
lvchange -ay /dev/vgx/home

mkdir -p /tmp/root/boot /tmp/root/root /tmp/root/home
mount /dev/vgx/root /tmp/root/root
mount /dev/mapper/loop0p1 /tmp/root/boot
mount /dev/vgx/home /tmp/root/home
cd /tmp/root/home
gzip -dcf /home/vmdata/bk/sl63incsbase-home.gz | restore -rv -f –
cd /tmp/root/boot
gzip -dcf /home/vmdata/bk/sl63incsbase-boot.gz | restore -rv -f –
cd /tmp/root/root
rm -rf /tmp/root/root/*
gzip -dcf /home/vmdata/bk/sl63incsbase-root.gz | restore -rv -f –

fstabの中身に UUIDが記述されている場合
vi /tmp/root/root/etc/fstab
を /dev/vda1 等に変更するか、正しいUUIDを記述する。

umount /tmp/root/boot/
umount /tmp/root/home/
umount /tmp/root/root

lvchange -an /dev/vgx/root
lvchange -an /dev/vgx/home

kpartx -d /dev/loop0
losetup -d /dev/loop0

glusterfsのsplit brain の解消

8 11月

split brain となった場合

確認は
# gluster volume heal syncdata info
Heal operation on volume syncdata has been successful

Brick 10.243.255.196:/home/syncdata
Number of entries: 1
/file01.txt

Brick 10.243.255.197:/home/syncdata
Number of entries: 1
/file01.txt

https://sites.google.com/site/glusterfstech/recovery/split-brain
GlusterFSはクライアントから該当ファイルへのアクセスを禁止します。クライアントから該当ファイルにアクセスすると「I/Oエラー」になります。

スプリットブレイン状態のファイルを回復するには、管理者が各ノードのファイルの内容を直接確認して、不要と判断した方のファイルを手動で削除した上で再レプリケーションを行う必要があります。

古いブリック内のファイルを削除して、正しい方のファイルで再レプリケーションします。
# gluster volume stop syncdata
# getfattr -d -m trusted.gfid -e hex /home/syncdata/brainfile.txt
getfattr: Removing leading ‘/’ from absolute path names
# file: home/syncdata/pgdata/postgresql.conf
trusted.gfid=0xebeef9c437894a8ca910dd98ab240297

# rm -rf /home/syncdata/brainfile.txt
# rm -rf /home/syncdata/.glusterfs/eb/ee/ebeef9c4-3789-4a8c-a91-0dd98ab240297
# gluster volume start syncdata

クライアントからbrainfile.txtに正常にアクセスするには、ファイルシステムの再マウントが必要になります。

———————————————————————————————–
3.2系だと、どちらかのファイルを持ってくればOKだったような?

3.3系から gluster ディレクトリが出来たので
http://www.joejulian.name/blog/fixing-split-brain-with-glusterfs-33/
にあるように

# export BRICK=/home/syncdata
# exportSBFILE=/pgdata/postgresql.conf
# GFID=$(getfattr -n trusted.gfid –absolute-names -e hex ${BRICK} ${SBFILE} | grep 0x | cut -d’x’ -f2)
# rm ${BRICK}${SBFILE}
# rm ${BRICK}/.glusterfs/${GFID:0:2}/${GFID:2:2}/${GFID:0:8}-${GFID:8:4}-${GFID:12:4}-${GFID:16:4}-${GFID:20:12}
として、削除する必要があるみたい。

KickStart tips

25 10月

KickStart

今まで、KickStartファイルでは


install

lang ja_JP.UTF-8

keyboard jp106
skipx
#reboot

#####################################################
########## CHANGE ###################################
#####################################################
url --url http://172.22.0.240/sl/61/os/x86_64
network --device eth0 --bootproto dhcp --noipv6
#####################################################
########## CHANGE END ###############################
#####################################################

rootpw --iscrypted $1$2sPFV9SZ$aoLTWq4d8g81nT32Tqwtb0
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone Asia/Tokyo
bootloader --location=mbr

##
## パーティション割当
##
clearpart --all --initlabel
part /boot --fstype ext4 --size=500 --asprimary
part pv.008002 --size=0 --grow --size=200
volgroup vg --pesize=65536 pv.008002
logvol / --fstype ext4 --name=root --vgname=vg --size=20480
logvol swap --fstype swap --name=swap --vgname=vg --size=4096
logvol /home --fstype ext4 --name=home --vgname=vg --size=20480
#
## 初期インストールパッケージ
##
%packages
@japanese-support
@core
@base
-syslog

##
## 前処理
##
%pre
%post --log=/mnt/sysimage/root/anaconda-post.log
exec /dev/tty3
/usr/bin/chvt 3

として、後処理をしてました。
boot: linunx text ks=http://hostname/ks.cfg hikisu=hogehoge
ができるといいなぁっと思っていたらできるんですね。

/proc/cmdline に引数が入ってる・・・

なので
%pre
%post –log=/mnt/sysimage/root/anaconda-post.log
exec /dev/tty3
/usr/bin/chvt 3
set — `cat /proc/cmdline`
for x in $*; do
cat $x
case $x in node*)
echo $x >> /tmp/ks-nodename
;;
esac;
done

cat /tmp/ks-nodename | sed -e “s/\(.*\)node=\(.*\)/node_name ‘\\2’/” >> /tmp/innodename

これで
boot: linux text ks=ks.cfg node=hogehoge とすると
# cat /tmp/innodename
node_name “hogehoge”

なんてことができるんだ。

chef バージョン管理

25 10月

chef のバージョン管理
バージョン管理は機能的にあるが、レポジトリの管理はない。
なので svn 等で別途管理する必要がある。

Cookbookディレクトリの metadata.rb ファイルに記述して変更する。
metadata.rb ファイルのバージョンを 0.0.1 -> 0.0.2 へ変更して
# knife cookbook upload -a -o /root/chef/chef-repo/cookbooks/
Uploading sample [0.0.2]
upload complete

バージョン番号の変更だけなので、coolbookの内容の固定作業
# knife cookbook upload -a -o /root/chef/chef-repo/cookbooks/ –freeze
upload complete

確認
# knife cookbook show sample | grep 0.0.2
frozen?: true

freeze 後は
# knife cookbook upload -a -o /root/chef/chef-repo/cookbooks/
するとエラーになる。

chef Roleの作成

25 10月

役割を登録するもの。

複数の Recipeを含むことがnodeと同じように Attributeを含むことも出来る。

Roleの作成
# EDITOR=vi knife role create sample-role
{
“chef_type”: “role”,
“name”: “sample-role”,
“override_attributes”: {
},
“json_class”: “Chef::Role”,
“run_list”: [
“recipe[sample]” ->ここ追加
],
“env_run_lists”: {
},
“default_attributes”: {
},
“description”: “”
}

作成した role を node に適用、
# knife node run_list add sl61dev “role[sample-role]”
run_list:
recipe[sample]
role[sample-role]

前の Recipe は run_list から外す。
# knife node run_list remove sl61dev recipe[sample]
run_list:
role[sample-role]

確認
# knife node show sl61dev

実行確認
# chef-clinet
今までの内容が出力されていればOK

chef-client インストールなど

24 10月

Chef-client
1. RBEL repoのインストール

# wget http://rbel.frameos.org/rbel6
# rpm -Uvh http://rbel.frameos.org/rbel6

2. Chef clientと依存モジュールのインストール
# yum install rubygem-chef

3. firewallの停止
# service iptables stop

4 カギファイル同期
# scp /etc/chef/validation.pem サーバ:/etc/chef/
# vi /etc/chef/client.rb
chef_server_url ‘http://サーバ:4000’
node_name ‘sl61dev’
# chef-client

knife(コマンドライン操作ツール)
knifeの初期化
# knife configure
WARNING: No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb]
Please enter the chef server URL: [http://servername:4000] http://servername:4000
Please enter an existing username or clientname for the API: [root] sl61dev
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem]
Please enter the path to a chef repository (or leave blank):
# ln -s /etc/chef/client.pem /root/.chef/sl61dev.pem

設定の確認
# knife node list
sl61dev

Chefのディレクトリ一式を作成する

Opscodeのgithubからディレクトリのひな形をダウンロードする。
# mkdir chef
# cd chef
# wget –no-check-certificate -O chef-repo.tar.gz http://github.com/opscode/chef-repo/tarball/master
# tar zxf chef-repo.tar.gz
# mv opscode-chef-repo-a3bec38 chef-repo

Cookbookを作る

knifeコマンドで、sampleという名前のcookbookを作成する。

# knife cookbook create sample -o ~/chef/chef-repo/cookbooks
** Creating cookbook sample
** Creating README for cookbook: sample
** Creating metadata for cookbook: sample
# ls chef-repo/cookbooks/sample
README.md attributes/ definitions/ files/ libraries/ metadata.rb providers/ recipes/ resources/ templates/

Recipeの作成~サーバへの登録

動作を確かめるために、実際にRecipeを書いてみる。

# vi chef-repo/cookbooks/sample/recipes/default.rb
template “/tmp/sl61.txt” do
source “sl61.txt.erb”
mode 0644
end
# vi chef-repo/cookbooks/sample/templates/default/sl61.txt.erb
Welcome to Chef!

CPU :
Memory:
OS :

Chef-serverへ登録してみる。
cookbookのuploadをする際に、クライアントがadmin権限を持っていないとauthorizeされないので、事前にadmin権限を付与しておく。

# knife cookbook upload -a -o ~/chef/chef-repo/cookbooks/

Cookbookをnodeに紐付ける。

# knife node run_list add sl61 ‘recipe[sample]’

クライアントに反映する

先ほど登録して紐付けたcookbookを実際にクライアントに反映をする。

# chef-client
# cat /tmp/sl61.txt
Welcome to Chef!

CPU :QEMU Virtual CPU version 0.9.1
Memory:1019852kB
OS :scientific 6.1

エラーが何も出なければOK。

Attributeを試す

Attributeはデフォルト値や共通値、ノード固有の値を定義するためのもの。

# vi chef-repo/cookbooks/sample/templates/default/sl61.txt.erb
Welcome to Chef!

CPU :
Memory:
OS :
Memo :

# cat chef-repo/cookbooks/sample/attributes/default.rb
default[:memo] = “None.”
# knife cookbook upload -a -o ~/chef/chef-repo/cookbooks/
# chef-client
# cat /tmp/sl61.txt
Welcome to Chef!

CPU :QEMU Virtual CPU version 0.9.1
Memory:1019852kB
OS :scientific 6.1
Memo :None.

このノードにはmemoというattributeは設定されていないので、
defaultで設定した「None.」が表示される。
そこで、このノードのattributeを設定して見る。

# EDITOR=vi knife node edit sl61
{
“normal”: {
“tags”: [
],
“memo”: “This is a sl61 for chef test.”
},
“name”: “sl61”,
“chef_environment”: “_default”,
“run_list”: [
“recipe[sample]”
]
}

# chef-client
# cat /tmp/sl61.txt
Welcome to Chef!

CPU :QEMU Virtual CPU version 0.9.1
Memory:1019852kB
OS :scientific 6.1
Memo :None.
Memo :This is a sl61 for chef test.

chef-serverのインストール

24 10月

Chef Server
1. RBEL repoのインストール

# wget http://rbel.frameos.org/rbel6
# rpm -Uvh http://rbel.frameos.org/rbel6

2. Chef Serverと依存モジュールのインストール
# yum install rubygem-chef-server

3. firewallの停止c
# service iptables stop

4. セットアップスクリプトの実行
# /usr/sbin/setup-chef-server.sh

5 Chef-web-uiにログイン
# /etc/init.d/chef-server-webui restart
設定ファイルは
cat /etc/chef/webui.rb 参照

knifeコマンド用としてユーザを作成し、clientを登録
# mkdir ~tokyox2/.chef
# cp /etc/chef/validation.pem /etc/chef/webui.pem ~tokyox2/.chef/
# chown -R tokyox2:tokyox2 ~tokyox2/.chef/
# su – tokyox2
$ knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb]
Please enter the chef server URL: [http://localhost:4000]
Please enter a clientname for the new client: [tokyox2]
Please enter the existing admin clientname: [chef-webui]
Please enter the location of the existing admin client’s private key: [/etc/chef/webui.pem] .chef/webui.pem
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] .chef/validation.pem
Please enter the path to a chef repository (or leave blank):
Creating initial API user…
Created client[tokyox2]
Configuration file written to /home/tokyox2/.chef/knife.rb

登録に成功していれば knife client list を実行

Hello world!

23 10月

サーバ作業のログを残すことにしてみます。