Ubuntu 10.04 LTS (Lucid Lynx) AMI

From misc notes
Jump to navigation Jump to search

EOLです

雑多なメモ

長い間、Ubuntu 8.04.4 LTS (Hardy Heron) と付き合って、Lucid Lynx はまだ性格がよくわからない事が多いので、癖をメモ

はじめの第一歩

echo "Asia/Tokyo" | sudo tee /etc/timezone
sudo dpkg-reconfigure --frontend noninteractive tzdata
sudo service rsyslog restart
sudo service cron restart
sudo aptitude update
sudo aptitude -y safe-upgrade
# reboot
# edit .screenrc
# screen -xRR
#  edit .bashrc
#     unset command_not_found_handle
#     IGNOREEOF=26
# mkfs.ext3 /dev/sdf
# mkdir /opt
# tune2fs -c -1 -i 0 /dev/sdf
# mount -o defaults,relatime /dev/sdf /opt
# vi /etc/fstab 
# umount /opt
# mount /opt
sudo aptitude install libperl5.10
sudo aptitude install sysstat
sudo aptitude install sqlite3
sudo aptitude install binutils
sudo aptitude install sharutils
sudo aptitude install traceroute
sudo aptitude -y install dump
sudo aptitude -y install bind9
sudo aptitude -y install emacs23-nox
sudo aptitude install s3cmd
sudo aptitude -y install git-core
sudo aptitude install python-ipy

使わない Instance Store は mount しないようにしておきましょう。(メモリーの無駄なので)

CloudFormation example for ubuntu

/etc/hosts.allow

書いておくほうが無難

sshd : .jp (ここは実情に合わせて) : allow
sshd : localhost 127.0.0.1 : allow
sshd : ALL : deny

#ALL : PARANOID : RFC931 20 : deny
 
ALL : localhost 127.0.0.1 : allow
ALL : [::1] : allow

rpcbind : ALL : deny

cloud-init

  • ec2-init から cloud-init になって戸惑い

調査中...

user-data で

#cloud-config
apt_update: true
apt_upgrade: true
timezone: "Asia/Tokyo"
packages:  
- emacs23-nox

(user-data に依存しすぎると、user-data がない IaaS の場合に困る。なので極力つかわないように考えるか...)

古い ec2-init からいただき

メールサーバとかで必要になる 内部 IP address と論理ホスト名との整合性を取る仕掛け Split DNS (基本的にこの設定をしておくと、EC2 の IP address の差異を気にしなくて良くなる)

/usr/local/etc/init に修正して配置

ec2-set-hosts

#!/usr/bin/python
#
#    Set up the hostname for ec2.
#    Copyright 2008 Canonical Ltd.
#
#    Author: Chuck Short <chuck.short@canonical.com>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
import urllib
import os
from Cheetah.Template import Template

api_ver = '2011-01-01'
metadata = None

base_url = 'http://169.254.169.254/%s/meta-data' % api_ver
my_ip = urllib.urlopen('%s/local-ipv4/' % base_url).read()
my_fqdn = os.popen("/bin/hostname -f").read().rstrip()
my_hostname = os.popen("/bin/hostname -s").read().rstrip()

# replace the ubuntu hostname in /etc/hosts
mp = {'localipv4' : my_ip, 'hostname' : my_hostname, 'fqdn' : my_fqdn}
t = Template(file="/usr/local/etc/bind/templates/hosts.tmpl", searchList=[mp])

os.system("rm -f /etc/hosts")
f = open("/etc/hosts", "w")
f.write('%s' %(t))
f.close()

/usr/local/etc/bind/templates/hosts.tmpl

127.0.0.1 localhost
#127.0.1.1 $fqdn $hostname
$localipv4 $fqdn $hostname

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

ec2-set-dns-zone (内部 DNS 設定用)(aptitude install python-ipy で IPy 導入前提)

#!/usr/bin/python
#
#    Set up the hostname for ec2.
#    Copyright 2008 Canonical Ltd.
#
#    Author: Chuck Short <chuck.short@canonical.com>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
import urllib
import os
from Cheetah.Template import Template
from IPy import IP

api_ver = '2011-01-01'
metadata = None

base_url = 'http://169.254.169.254/%s/meta-data' % api_ver
my_ip = urllib.urlopen('%s/local-ipv4/' % base_url).read()
my_fqdn = os.popen("/bin/hostname -f").read().rstrip()
ip = IP(my_ip)
my_arpa = ip.reverseName().rstrip('.')

# replace the Split DNS host ip address in /etc/bind/db.myzone
mp = {'localipv4' : my_ip}
t = Template(file="/usr/local/etc/bind/templates/zone.tmpl", searchList=[mp])

os.system("rm -f /etc/bind/db.myzone")
f = open("/etc/bind/db.myzone", "w")
f.write('%s' %(t))
f.close()

# replace the Split DNS host ip address in /etc/bind/db.myarpa
mp = {'fqdn' : my_fqdn}
t = Template(file="/usr/local/etc/bind/templates/arpa.tmpl", searchList=[mp])

os.system("rm -f /etc/bind/db.myarpa")
f = open("/etc/bind/db.myarpa", "w")
f.write('%s' %(t))
f.close()

# replace the Split DNS host ip address in /etc/bind/myzone.conf
mp = {'fqdn' : my_fqdn, 'arpa' : my_arpa}
t = Template(file="/usr/local/etc/bind/templates/conf.tmpl", searchList=[mp])

os.system("rm -f /etc/bind/myzone.conf")
f = open("/etc/bind/myzone.conf", "w")
f.write('%s' %(t))
f.close()

/usr/local/etc/bind/templates/zone.tmpl

;
; BIND data file for Split DNS
;
@	604800	IN	SOA	localhost. root.localhost. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	604800	IN	NS	localhost.
@	604800	IN	A	$localipv4
@	604800	IN	MX	10	@

/usr/local/etc/bind/templates/arpa.tmpl

;
; BIND data file for Split DNS
;
@	604800	IN	SOA	localhost. root.localhost. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	604800	IN	NS	localhost.
@	604800	IN	PTR	$fqdn.

/usr/local/etc/bind/templates/conf.tmpl

zone "$fqdn" {
	type master;
	file "/etc/bind/db.myzone";
};

zone "$arpa" {
	type master;
	file "/etc/bind/db.myarpa";
};

/etc/bind/named.conf.local に以下を追加する

include "/etc/bind/myzone.conf";

/etc/bind/named.conf.options の forwarders を EC2 の内部 DNS サーバに設定

       forwarders {
               172.16.0.23;
       };

/etc/bind/named.conf.options の listen address 制限しておく

        // listen-on-v6 { any; };
        listen-on { 127.0.0.1; };
        listen-on-v6 { ::1; };

起動スクリプトとしてリンク

sudo ln -s /usr/local/etc/init/ec2-set-hosts /etc/rc2.d/S12ec2-set-hosts
sudo ln -s /usr/local/etc/init/ec2-set-dns-zone /etc/rc2.d/S13ec2-set-dns-zone

IPv4 only にするために /etc/default/bind9 を変更

OPTIONS="-4 -u bind"

dhcp client が自動生成する /etc/resolv.conf に反映する為に、/etc/dhcp3/dhclient.conf のコメントを外す

prepend domain-name-servers 127.0.0.1;

hostname を設定する。

echo "host" | sudo tee /etc/hostname
sudo /bin/hostname -F /etc/hostname

host_name domain_name の debian 系の考え方

/etc/hostname This file should only contain the hostname and not the full FQDN.

FreeBSD の hostname 変数は FQDN 入れるんだがな。Linux というか debian の文化を調べてみよう...

第5章 ネットワークの設定


EIPをアサインして、公開 DNS に登録する。

  • CDP ネタのメモ (CDPの卵)

テスト環境等で、グローバルネットワークでの名前空間(ドメイン名)が本番の名前空間(ドメイン名)と異なる環境の場合、本 Split DNS の構成に加えて mod_headers や varnish 等で Host ヘッダーを書き換え処理をする事と、レスポンスのURLを mod_substitute や mod_sed 等で書き換えする事により、サーバ内部の hostname を論理ドメイン名として抽象化して扱えるようになる。WordPress の様にドメイン名が Database 上に定義されている場合に便利。 (要検証)

varnish vcl はこんな感じか

sub vcl_recv {
    set req.http.host = "www.example.com";
       :
    return (lookup);
}

mod_sed の書き換えルールはこんな感じかな

    <IfModule mod_sed.c>
       AddOutputFilter Sed html
       OutputSed "s/www\.example\.com/test.example.com/g"
    </IfModule>

hostname

  • /bin/hostname

いろいろかわってる感じ

hostname --fqdn について

See the warnings in section THE FQDN above, and avoid using this option; use hostname --all-fqdns instead.

とある。'THE FQDN' セクションには

THE FQDN
      このコマンドでFQDN(hostname --fqdnで返される)やDNSドメイン名(dnsdomainnameで返される)を
      変更することはできません。システムのFQDNはresolver(3)でホスト名として返す名前です。

      技術的背景:FQDNはgethostname(2)で返されたホスト名をgetaddrinfo(3)に渡して得られた名前です。
                DNSドメイン名は最初のドット以後の部分です。

      したがって、名前解決の優先度を指定するコンフィグレーション(通常 /etc/host.conf)に依存します。
      通常は(hostsファイルがDNSやNISに優先されているので) /etc/hosts を変更します。
       
      もしマシンに複数のネットワークインターフェイスやアドレスがある場合、もしくはモバイル環境で使用されている場合は、
      FQDNとドメイン名を複数を持っている場合や、全く無いといった可能性があります。
      したがって、hostname --fqdn, hostname --domain, dnsdomainnameコマンドは使用すべきではありません。
      hostname --ip-addressも同様の制限があり使用すべきではありません。
ソースコード : hostname.c

したがって、hostname を明示的に変更している場合の (/etc/hostname を自分のホスト名にしている場合)

% hostname --fqdn
hostname: Name or service not known

は無視すれば良い。

でも、気になる場合は環境に合わせて、hosts や resolver 系コンフィグレーションを変更すれば良い。

debian, ubuntu では /etc/hosts をちゃんと書くこと。

IPADDRESS <host_name>.<domain_name> <host_name>

また /etc/resolv.conf の domain と search 行を消すか、ドメイン名を指定する。(DNS Resolver の挙動も合わせる意味で)

ec2 の dhcp 環境では、

指定する場合

/etc/dhcp3/dhclient.conf で

supersede domain-name "ドメイン名";

削除する場合

(というよりも resolv.conf を dhclient3 に自動生成させない)

/etc/dhcp3/dhclient-enter-hooks.d/ で hack するべし 以下の内容のファイルをお好きな名前で作成する。

#!/bin/bash
make_resolv_conf(){
:
}

motd

  • motd

upgrade したはずなのに、

A newer build of the Ubuntu lucid server image is available.
It is named 'release' and has build serial 'XXXXXXXX.X'.

と表示される。 known bug らしい。優先度 low で fix 予定

Bug #653220 in cloud-init (Ubuntu): “remove updates-check from cloud-init”
  • 2重 motd 問題は
mv /etc/motd.tail /etc/motd.tail.old

sysctl

/etc/sysctl.d/ なるものが出来てる。 READMEによると 60-*.conf でホゲリなさいとの事。

60-my-tuning.conf てな名前で最低限の指定など

vm.swappiness=0
kernel.panic_on_oops=1
kernel.panic=1
# Disable IPv6
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

どうも、/etc/sysctl.d/ に配置しても、ipv6 系は反映されないようだ。なので kernel option で殺す。

大規模サーバの都市伝説 ;)

kernel.sem=250 32000 128 1024
kernel.msgmni=256
kernel.shmmax=268435456
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65500
#
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.rmem_default=262144 
net.core.wmem_default=262144 
#
net.core.netdev_max_backlog=30000
net.core.somaxconn=65535
net.ipv4.tcp_max_orphans=262144
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout=3
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1

kernel options

grub-legacy-ec2 なので いろいろ違う。

/etc/default/grub は /usr/sbin/update-grub-legacy-ec2 で読み込んでいるが、GRUB2 用がインストールされているので無視

debian の grub legacy では '# ' に仕込むという変な仕様

/boot/grub/menu.lst を変更

# defoptions=xencons=hvc0 console=hvc0
                                       |
# defoptions=xencons=hvc0 console=hvc0 ipv6.disable=1
sudo update-grub-legacy-ec2

で反映????

☆注意☆

menu.lst を書き換えた後、debconf が対話メニューを出す場合

install the package maintainer's version

を選択すること。(でないと、これからの update の際に menu.lst が更新されない)

echo 'grub-legacy-ec2 grub/update_grub_changeprompt_threeway select install_new' | sudo debconf-set-selections
echo 'grub-legacy-ec2 grub/update_grub_changeprompt_threeway seen true' | sudo debconf-set-selections

これでは逝けないようだ...

#!/bin/sh

set -e
. /usr/share/debconf/confmodule
db_subst "grub/update_grub_changeprompt_threeway" BASENAME menu.lst
db_subst "grub/update_grub_changeprompt_threeway" FILE /var/run/grub/menu.lst
db_go || true

こんなので試したが、対話メニューが出てしまうな? まだ調査中...

ucf --purge /var/run/grub/menu.lst
ucfr --purge grub /var/run/grub/menu.lst
update-grub-legacy-ec2

メモ

/var/cache/debconf/config.dat

Name: grub/update_grub_changeprompt_threeway
Template: grub/update_grub_changeprompt_threeway
Value: install_new
Owners: grub, grub-legacy-ec2
Flags: seen
Variables:
 BASENAME = menu.lst
 FILE = /var/run/grub/menu.lst
# debconf-show grub-legacy-ec2
* grub/update_grub_changeprompt_threeway: install_new
export DEBIAN_FRONTEND=noninteractive
man 1 ucf

apparmor

普通じゃない設定をしたら、整合性を合わせないといけない

  /ebs/var/lib/mysql/ r,
  /ebs/var/lib/mysql/** rwk,

  /dev/shm/ rw,
  /dev/shm/** rwkl,

定番パッケージ

cron-apt / unattended-upgrades

sudo aptitude install cron-apt
 edit .....

unattended-upgrades というのもあるのね。 このパッケージはデフォルトで入ってる模様。

cron-apt から unattended-upgrades に換えましたが、やっぱり微妙に使い勝手が悪いので、また cron-apt を使うことにしました。

sudo aptitude install postfix
sudo aptitude install mailx
AutomaticSecurityUpdates

/etc/apt/apt.conf.d/10periodic

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "5";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::RandomSleep "1800";

/etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
	"Ubuntu lucid-security";
	"Ubuntu lucid-updates";
};

デバッグ stamp_file を削除

rm /var/lib/apt/periodic/*

/etc/apt/apt.conf.d/10periodic に

APT::Periodic::RandomSleep "18";    (実行待ち時間を短くする)
APT::Periodic::Verbose "1";             (デバッグログを表示)
unattended-upgrade --dry-run -d

いろいろ

sudo aptitude install php-pear
sudo aptitude install apache2-prefork-dev
sudo aptitude install php5-dev
# sudo pecl upgrade -f apc-3.1.7
# sudo pecl upgrade -f memcache-3.0.6
# sudo /etc/init.d/apache2 restart

Zimbra 系メモ

Sending Mail from Terminal (optional)

wget http://ubuntu.lnix.net/misc/mta-dummy/mta-dummy_1.0_all.deb 
dpkg -i mta-dummy_1.0_all.deb
aptitude install bsd-mailx
 Add the following to /etc/mail.rc:
  set sendmail=/opt/zimbra/postfix/sbin/sendmail

WordPress 系メモ

とりあえずパッケージでいれて設定だけいただく

sudo aptitude -y install wordpress
sudo /bin/bash /usr/share/doc/wordpress/examples/setup-mysql -n WORDPRESSDBNAME HOSTNAME
# 消す前に /usr/share/doc/wordpress 固めて保存しておく
sudo apt-get -y remove wordpress
sudo aptitude keep-all

未整理

お手軽 計測・可視化

node

sudo aptitude install munin-node
sudo aptitude install munin-plugins-extra
sudo aptitude install libcache-cache-perl
sudo aptitude install libcache-memcached-perl
sudo aptitude install libtext-csv-xs-perl

(2012/11/06 の security patch で)

/var/lib/munin から /var/lib/munin-node に変わった

server

sudo aptitude install munin

お手軽 サービス・死活監視

sudo aptitude install monit

.screenrc

defutf8 on
defkanji utf-8
encoding utf-8 utf-8
defencoding utf-8
#
vbell off
autodetach on
startup_message off
altscreen on
# for Emacsian
escape  ^Tt
#
defhstatus "^En:^Et"
hardstatus on
hardstatus alwayslastline "screen |%c %m/%d | %w"
# for Macintosh delete key
bindkey -k kD stuff \177
# for MacOSX Terminal.app
termcapinfo xterm* ti@:te@
# avoid angerous key bind
bind x
bind ^x
bind k
bind ^k
bind .
bind ^\
bind \\
bind ^h
bind h

.tmux.conf (tmux の方が楽かな...)

# Set the prefix to C-t.
#  for Emacsian
unbind C-b
set -g prefix C-t
bind C-t send-prefix

~/.ssh/config

Host *
  #ForwardAgent yes
  TCPKeepAlive no
  ServerAliveInterval 60
  ServerAliveCountMax 15


varnishd

Installation on Ubuntu
echo "deb http://repo.varnish-cache.org/ubuntu/ lucid varnish-2.1" | sudo tee /etc/apt/sources.list.d/varnish.list
wget -qO - http://repo.varnish-cache.org/debian/GPG-key.txt | sudo apt-key add -
sudo aptitude update
sudo aptitude install varnish


あんちょくな daily backup script

#!/bin/sh

if [ "`/bin/cat /proc/partitions | /bin/fgrep sdp`" ]; then
    /sbin/tune2fs -c -1 -i 0 /dev/sdp > /dev/null 2>&1
    /sbin/e2label /dev/sda1 cloudimg-rootfs
    if [ "`/bin/cat /proc/mounts | /bin/fgrep sdp`" ]; then
	echo "Warn: /dev/sdp is already mounted."
    else
	if [ ! -e /backup ]; then
	    /bin/mkdir /backup
	fi
	/bin/mount -t ext3 /dev/sdp /backup
	/bin/sleep 5
    fi
    # check twice
    if [ "`/bin/cat /proc/mounts | /bin/fgrep sdp`" ]; then
	if [ -c /backup/dev/null ]; then
	    #  FULL BACKUP
	    # cd /backup
	    # /sbin/dump 0uf - /dev/sda1 | /sbin/restore rf -
	    # /usr/bin/nice -n 19 /usr/bin/rsync -ax -e /usr/bin/ssh --delete / /backup/
	    /bin/sync; /bin/sync; /bin/sync
	    /bin/sleep 5
	    /usr/bin/nice -n 19 /usr/bin/rsync -ax --delete / /backup/
	    /bin/sync; /bin/sync; /bin/sync
	    /bin/sleep 5
	    /bin/umount /backup
	else
	    echo "Error: /backup is unexpected volume."
	fi
    else
	echo "Error: something failure happens. mount error?"
    fi
else
    echo "Error: /dev/sdp is not attached."
fi


このあと snapshopt をとる
botoを使ってEBSをバックアップ(世代管理つき) - インフラエンジニアway

ubuntu AMI は boto 1.9b が標準ではいっているので管理プログラムは boto を使うのがよさそう。

管理作業用の credential は IAM で権限を制限したものを利用する。

Snapshot 運用に制限する場合の Policy

{
  "Statement": [
    {
      "Action": [
        "ec2:CreateSnapshot",
        "ec2:DeleteSnapshot",
        "ec2:DescribeRegions",
        "ec2:DescribeSnapshotAttribute",
        "ec2:DescribeSnapshots",
        "ec2:ModifySnapshotAttribute",
        "ec2:ResetSnapshotAttribute"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

ubuntu 12.04 Precise では boto が 2.2.2 になっていた。tag 系の処理が追加されていて、嬉しいのだけど、すこしはまった。

上記の Policy に tag 系を追加する事

{
  "Statement": [
    {
      "Action": [
        "ec2:CreateSnapshot",
        "ec2:DeleteSnapshot",
        "ec2:DescribeRegions",
        "ec2:DescribeSnapshotAttribute",
        "ec2:DescribeSnapshots",
        "ec2:DescribeVolumes",
        "ec2:DescribeTags",
        "ec2:CreateTags",
        "ec2:ModifySnapshotAttribute",
        "ec2:ResetSnapshotAttribute"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}


MySQL を noninteractive でインストール。(対話型でパスワードを聞かれるのを自動設定する)

echo 'mysql-server-5.1 mysql-server/root_password password PASSWORD' | sudo debconf-set-selections
echo 'mysql-server-5.1 mysql-server/root_password seen true' | sudo debconf-set-selections
echo 'mysql-server-5.1 mysql-server/root_password_again password PASSWORD' | sudo debconf-set-selections
echo 'mysql-server-5.1 mysql-server/root_password_again seen true' | sudo debconf-set-selections
echo 'mysql-server-5.1 mysql-server/start_on_boot boolean true' | sudo debconf-set-selections
sudo aptitude -y install mysql-server


NICのアクセラレーション設定を無効にする (cloud-init の新バージョンと相性が悪い模様。これは rc.local に持って行くか...) /etc/network/interfaces に追加

post-up /usr/sbin/ethtool -K eth0 sg off
post-up /usr/sbin/ethtool -K eth0 tso off

root device 問題

boot する root device の指定が LABEL=cloudimg-rootfs になっている。 (最新の ubuntu AMI では LABEL=uec-rootfs から LABEL=cloudimg-rootfs に変わっているのを発見) 想定している boot device 以外に DISK LABEL が cloudimg-rootfs の volume が attach されている場合に不具合が起きる可能性があります。 ☆環境により boot しない場合有り 注意☆

sudo e2label /dev/sda1
ls -al /dev/disk/by-label
sudo e2label /dev/sda1 cloudimg-rootfs
sudo e2label /dev/sdp no-rootfs

という手もあるんだが... root device = boot device = /dev/sda1 に単純化したほうが事故が少ないと思う。

EC2 の環境では、ディスクドライブが明示的に指定でき、明示的にそのドライブ名にボリュームをアサインできるので、Disk Label にたよる必要はない。

Ubuntu で LABEL=cloudimg-rootfs にしている意味・意義がなくなるが、EBS backed AMI での運用の利便性(instance stop して volume 挿げ替え)と確実性を考えから root=/dev/sda1 固定にすべきに参萬点

/etc/fstab

LABEL=cloudimg-rootfs を /dev/sda1 に変更

/boot/grub/menu.lst

root=LABEL=cloudimg-rootfs を root=/dev/sda1 に変更
# kopt=root=LABEL=cloudimg-rootfs ro
            |
# kopt=root=/dev/sda1 ro
Bug #665235 in Ubuntu on EC2: “grub-legacy-ec2: attaching a volume to maverick instance may boot off it”

いろんな議論があるようですが、私は現在の変化しつつある状況では保守的な選択をしますね。つまり、root=/dev/sda1 決めうち。

☆注意☆ kernel 3.x では /dev/xvda1 となる。(このあたりが、LABEL で指定するメリットではありますがね)

limit 系

startup script にキッチリ ulimit を書くのが本道

ウッカリを防ぐために pam 系で制限解除

/etc/security/limits.d/mylimits.conf

* soft core 0
* hard core 0
root soft core 0
root hard core 0
* soft nofile 524288
* hard nofile 524288
root soft nofile 524288
root hard nofile 524288
* soft nproc unlimited
* hard nproc unlimited
root soft nproc unlimited
root hard nproc unlimited
* soft stack unlimited
* hard stack unlimited
root soft stack unlimited
root hard stack unlimited
* soft memlock unlimited
* hard memlock unlimited
root soft memlock unlimited
root hard memlock unlimited
* soft as unlimited
* hard as unlimited
root soft as unlimited
root hard as unlimited

12.04 LTS

メモ

Ubuntu 12.04 (Precise Pangolin) LTS
[ec2ubuntu] Upgrade from Ubuntu 10.04 LTS to Ubuntu 12.04 LTS

It should be safe, yes.
As with any OS upgrade, you should do what you can to ensure the safety of
your data.  I would suggest:
  - shut down instance
  - snapshot root volume
  - start instance
  - sudo do-release-upgrade

If it goes south, please do open a bug.
Thanks.
UpgradeNotes - Community Ubuntu Documentation
PreciseUpgrades - Community Ubuntu Documentation
PrecisePangolin/ReleaseNotes/UbuntuServer - Ubuntu Wiki
DNS in Ubuntu 12.04 | Stéphane Graber's website

EC2 での 10.04 LTS -> 12.04 LTS

sudo do-release-upgrade -d
(Third party sources disabled : 'software-properties' で後で処理)
((Configuring sysstat というダイアログで Yes 選択))
(Configuring phpmyadmin というダイアログで Yes 選択)
(Configuring libc6 というダイアログで Yes 選択)
((Configuring grub-pc というダイアログで install the package maintainer's version 選択))
((grub boot loader の install デバイス選択するかも))
(phpmyadmin の更新処理ではまる...)
(mysql-server が 5.1 から 5.5 になるので メタパッケージの確認を : aptitude install mysql-server mysql-client)
(reboot 前に resolver の対応やってるほうがよさげ) (resolv.conf -> ../run/resolvconf/resolv.conf)
(ALERT!  /dev/sda1 does not exist.  Dropping to a shell! で落ちるので、menu.lst を変えないといけない /dev/xvda1 )
(backport は変わってくれない)
(sudo dpkg-reconfigure mysql-server-5.5)
(sudo dpkg-reconfigure phpmyadmin)

cloud-init で... (/var/log/boot.log)

cloud-init-nonet waiting 120 seconds for a network device.
cloud-init-nonet gave up waiting for a network device.

とかなって、network interface が上がってこなくて、timeout した後に上がる場合はこれがアヤシイ

/etc/network/interfaces の IFACE OPTIONS を見直する。
post-up とかで独自の処理入れていて、何らかの理由で正常終了していない場合にこけるようだ。

12.04 LTS で気がついた差異

デフォ ext4
/etc/ec2_version を書き換え "Ubuntu 12.04 (Precise Pangolin)"
/etc/debian_version は wheezy/sid
fstab から proc の記述を削除
fstab /dev/xvda1 へ
fstab ext4 にしておく
menu.lst から xencons=hvc0 を削除
aptitude remove dhcp3-client dhcp3-common
dpkg --purge dhcp3-client
rm -rf dhcp3
aptitude remove lzma
dhclient.conf に IPv6 関連の設定が追加
aptitude install cloud-initramfs-growroot cloud-initramfs-rescuevol
/etc/init/cloud-run-user-script.conf を削除
IPv6 系はおとなしく生かせておく
dpkg -l|grep ^rc|awk '{printf("aptitude -y purge %s\n", $2)}'
/var/www が /srv/www へ (^^;;;


チェックする事

/etc/fstab チェック
find . -name "*.dpkg*" -ls   でコンフィグチェック
/etc/apt/apt.conf.d/01ubuntu.dpkg-remove 削除
/etc/apt/apt.conf.d/50unattended-upgrades.dpkg-old 削除
/etc/init/ureadahead.conf.dpkg-new 削除
(aptitude install acpid) HVMでないなら不要
(aptitude install whoopsie) 不要!
aptitude install fonts-ubuntu-font-family-console
aptitude install linux-image-extra-virtual
/etc/apt/preferences.d/backports 編集 (Pin: release a=precise-backports)
/etc/munin/plugins の ディスク名替える
(qw(aaa bbb)) 替える
/etc/default/whoopsie で false

お掃除

aptitude purge whoopsie
aptitude purge apport apport-symptoms python-apport
aptitude remove update-motd
aptitude remove radeontool
aptitude remove hal
aptitude remove hal-info
aptitude remove gcc-4.4-base
aptitude remove ecryptfs-utils
aptitude remove cryptsetup
aptitude remove cryptsetup-bin
aptitude remove cpu-checker
aptitude remove consolekit
aptitude remove iputils-arping
aptitude remove libck-connector0
aptitude remove libcryptsetup4
aptitude remove libecryptfs0
aptitude remove vbetool
aptitude remove smartdimmer
aptitude remove pm-utils
aptitude remove libx86-1
aptitude remove libhal1

aptitude remove fuse-utils
aptitude remove cpp-4.6
aptitude remove apparmor-utils
aptitude remove libapparmor-perl
aptitude remove libapparmor1
aptitude remove libgmp3c2

MySQL-5.5 で InnoDB が...

skip-innodb
default-storage-engine=MyISAM

のパターンか

$ sudo service mysql stop
$ sudo mv /var/lib/mysql/ib_logfile* /some/safe/location/
$ sudo service mysql start

 icoro : MySQLを5.5にアップデートしたら動かなくなったという話

わかってるって

*** /dev/xvda1 will be checked for errors at next reboot ***

解消方法

rm /var/lib/update-notifier/fsck-at-reboot
cd /usr/lib/update-notifier/
./update-motd-fsck-at-reboot


ubuntu 決め打ちなら

lsb_release -cs

とかで、条件分岐して cookbook 変える

Ubuntu 10.04 LTS から Ubuntu 12.04 LTS へのアップグレード
abexsoftのブログ: さくらVPSのUbuntuを10.04から12.04にアップデート

Backports

UbuntuBackports
UbuntuUpdates
Proposed updates : Enabling the proposed updates repository can break your system. It is not recommended for inexperienced users.

/etc/apt/sources.list.d/backports.list

# deb http://archive.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse
deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse

/etc/apt/preferences.d/backports

Package: *
Pin: release a=lucid-backports
Pin-Priority: 100

明示的に backports からinstall

aptitude  install -t lucid-backports mosh

(おまけMacOSX)

brew update
brew install mobile-shell
mosh --ssh="ssh -i .ssh/keypair" ubuntu@host.example.jp

(security groups で UDP 60000-61000 あける事)

Opscode chef recipes

echo 'deb http://apt.opscode.com/ lucid-0.10 main' | sudo tee /etc/apt/sources.list.d/opscode.list
wget -qO - http://apt.opscode.com/packages@opscode.com.gpg.key | sudo apt-key add -
sudo aptitude update
sudo aptitude -y install chef

ココでの設定を cookbook にまとめ中

nxhack / chef My recipes (opscode chef cookbooks) : Bootstrap - Configuration - Orchestration