Ubuntu 10.04 LTS (Lucid Lynx) AMI
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