oinume journal

Scratchpad of what I learned

multipassでAnsibleの動作確認用のVMを作る

モチベーション

趣味で開発しているプロダクトのためにVPSを立てていて、Ansibleで各種ミドルウェアの設定をしているんだけど、VirtualBoxのApple Silicon への対応が微妙なのでmultipassを使ってVMを立てる+Ansible Playbookを流してセットアップするということをやってみたのでそのメモ。

multipassでVMを立ち上げる

まず初めにssh用の秘密鍵と公開鍵を生成する。multipassでVMを立ち上げるときはデフォルトでSSH用の鍵を生成してくれるけど、Ansibleでsshするときの鍵を作っておく。

ssh-keygen -t rsa -b 4096 -C multipass -f multipass

次に、以下のようなcloud-init.ymlを作成する。

users:
  - default
  - name: multipass
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - "ssh-rsa <上で生成した公開鍵>"

multipass launchでVMを立ち上げる時に、--cloud-init オプションで先ほどのcloud-init.ymlを指定する。これを行うことでmultipassユーザーの authorized_keys に上で作成したSSHの公開鍵がセットされる。

multipass launch -n vps -c=1 -m=1G -d=5G --cloud-init=cloud-init.yml

次にVMのIPアドレスを確認する。

multipass info vps

Name:           vps
State:          Running
IPv4:           192.168.64.13
Release:        Ubuntu 22.04.2 LTS
Image hash:     f6b5b3a980f2 (Ubuntu 22.04 LTS)
CPU(s):         1
Load:           0.20 0.11 0.04
Disk usage:     1.4GiB out of 4.7GiB
Memory usage:   151.3MiB out of 962.5MiB
Mounts:         --

Ansibleのinventoryファイルを以下のようにする。

[local]
default ansible_host=<上で調べたIP> ansible_port=22 ansible_user='multipass' ansible_ssh_private_key_file='multipass'

最後にansible-playbookを実行する。

ANSIBLE_SSH_ARGS='-o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook  --inventory-file=ansible/inventory/multipass  --timeout=30 -v -D ./ansible/hoge.yml

multipassのコマンドメモ

  • multipass transfer : VMからファイルをコピーする or ホストからVMにファイルをコピーする
  • multipass shell : VM内にシェルでログインする

conoha VPSにUbuntu 14.04(Trusty Tahr)をインストールしてみた

どうもこんにちは。VPS難民です。

Ubuntu 14.04 LTSがリリースされたので、今使っているお名前.comのVPS(Ubuntu 12.04)から移行しようと思ってconoha VPSにインストールしてみた。

2014年5月の時点では、conoha VPSはまだ正式にはUbuntu 14.04には対応してないので自分でISOイメージをアップロードする必要がある。

Ubuntu 14.04のインストール

ISOイメージのアップロードについては、ドキュメント通りにやればOKである。ISOイメージをアップロードして電源をONにするとインストーラーが立ち上がっているので、コントロールパネルのコンソールから接続してインストールすればおk。

CPU

cat /proc/cpuinfo すると下記のようなCPUスペック。これが本当なら2013Q3に発売されたIvy BridgeのヤツなのでけっこういいCPU積んでることになる。

$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
stepping    : 4
microcode   : 0x1
cpu MHz     : 2593.748
cache size  : 4096 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt fsgsbase smep erms
bogomips    : 5187.49
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

ベンチマーク

ためしに今使っているお名前.com VPSとconoha VPSでUnixBench取ってみた。結果としてはびっくりお名前.com VPSの方がいい数字をたたき出してた。conoha VPSは複数台構成にできるからちょっとパフォーマンス悪くしてるのかなぁ。

お名前.com VPS (Ubuntu 12.04)

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: barcelona: GNU/Linux
   OS: GNU/Linux -- 3.8.0-39-generic -- #57~precise1-Ubuntu SMP Tue Apr 1 20:04:50 UTC 2014
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz (6133.5 bogomips)
          x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
   CPU 1: Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz (6133.5 bogomips)
          x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
   CPU 2: Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz (6133.5 bogomips)
          x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
   23:09:38 up 32 min,  1 user,  load average: 0.39, 0.24, 0.23; runlevel 2

------------------------------------------------------------------------
Benchmark Run: 土  5月 03 2014 23:09:38 - 23:37:48
3 CPUs in system; running 3 parallel copies of tests

Dhrystone 2 using register variables       98882250.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    12340.3 MWIPS (9.9 s, 7 samples)
Execl Throughput                              10104.1 lps   (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1244545.8 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          341933.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2614639.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             6337756.5 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 770446.6 lps   (10.0 s, 7 samples)
Process Creation                              26299.8 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  17509.8 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2694.2 lpm   (60.0 s, 2 samples)
System Call Overhead                        9335253.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   98882250.1   8473.2
Double-Precision Whetstone                       55.0      12340.3   2243.7
Execl Throughput                                 43.0      10104.1   2349.8
File Copy 1024 bufsize 2000 maxblocks          3960.0    1244545.8   3142.8
File Copy 256 bufsize 500 maxblocks            1655.0     341933.7   2066.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    2614639.4   4508.0
Pipe Throughput                               12440.0    6337756.5   5094.7
Pipe-based Context Switching                   4000.0     770446.6   1926.1
Process Creation                                126.0      26299.8   2087.3
Shell Scripts (1 concurrent)                     42.4      17509.8   4129.7
Shell Scripts (8 concurrent)                      6.0       2694.2   4490.4
System Call Overhead                          15000.0    9335253.2   6223.5
                                                                   ========
System Benchmarks Index Score                                        3474.1

conoha VPS (Ubuntu 14.04)

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: taipei: GNU/Linux
   OS: GNU/Linux -- 3.13.0-24-generic -- #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz (5187.5 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 1: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz (5187.5 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 2: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz (5187.5 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   23:09:01 up 16 min,  1 user,  load average: 0.48, 0.36, 0.15; runlevel 2

------------------------------------------------------------------------
Benchmark Run: 土  5月 03 2014 23:09:01 - 23:37:04
3 CPUs in system; running 3 parallel copies of tests

Dhrystone 2 using register variables      101603873.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    13534.6 MWIPS (9.5 s, 7 samples)
Execl Throughput                               9342.6 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1234346.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          357616.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       3552485.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2069868.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 474862.6 lps   (10.0 s, 7 samples)
Process Creation                              11240.1 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  11490.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2664.5 lpm   (60.0 s, 2 samples)
System Call Overhead                        1245743.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  101603873.7   8706.4
Double-Precision Whetstone                       55.0      13534.6   2460.8
Execl Throughput                                 43.0       9342.6   2172.7
File Copy 1024 bufsize 2000 maxblocks          3960.0    1234346.4   3117.0
File Copy 256 bufsize 500 maxblocks            1655.0     357616.0   2160.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    3552485.0   6125.0
Pipe Throughput                               12440.0    2069868.8   1663.9
Pipe-based Context Switching                   4000.0     474862.6   1187.2
Process Creation                                126.0      11240.1    892.1
Shell Scripts (1 concurrent)                     42.4      11490.6   2710.0
Shell Scripts (8 concurrent)                      6.0       2664.5   4440.9
System Call Overhead                          15000.0    1245743.8    830.5
                                                                   ========
System Benchmarks Index Score                                        2384.7

Ubuntu Linux 64bit版で32bit向けバイナリを使えるようにする

今回このブログのサーバをリプレースするにあたり、Ubuntu Linuxを32bitから64bit(amd64)にしたのですが、64bit環境で32bit向けのi386バイナリを実行する必要があったのでその方法をメモしておきます。結論から書くと

 

$ sudo aptitude install ia32-libs

 

して ia32-libs というパッケージをインストールするだけで、32bit向けのバイナリが64bit環境で実行できるようになります。

 

なんでこれが必要だったかというと、Dynamic DNSのIP更新ツールとしてDiCE for Linuxを使用していて、これだけは32bit向けのバイナリしか配布しておらず、64bit環境で実行しようとすると下記のエラーが出てしまっていました。

 

$ sudo /usr/local/DiCE/diced -e0

sudo: unable to execute /usr/local/DiCE/diced: No such file or directory

 

 

どうしたものかなと思ってググってみると、Adobe Flashなどの32ビットアプリケーションを64ビットLinux上で利用するという記事を発見して ia32-libs の存在を知りました。こういうのもちゃんとパッケージ化されていて一発でインストールできるのがDebianの素晴らしいところですね。

 

[tmkm-amazon]4861905389[/tmkm-amazon]

Ubuntu LinuxでSSDの寿命を延ばすための設定

SSDの寿命が本当に短いのか実験していないので何とも言えませんが、Ubuntu LinuxSSDの寿命を延ばすために行なった設定を書いておきます。本当に延びるかは謎です。 

swap領域をSSD内に作らない

swap領域をSSDに作ってしまうと、仮想メモリを割り当てる際にSSDに書き込みをしてしまうのでこれは避けましょう。また、/etc/sysctl.conf に以下を追記してOSごと再起動します。(再起動の代わりに sysctl -p で即時に反映することもできます)

vm.swappiness = 0

この設定をするとswapにページアウトしにくくなります。

OSのキャッシュの書き込みの頻度調整

Ubuntuはデフォルトでは書き込み処理はすべてメモリ上にキャッシュされ、これを5秒に1回ディスクに書き込むという仕組みになっているらしいです。なので、このキャッシュを書き込む頻度を5秒から15秒にします。具体的には /etc/sysctl.conf に以下の行を追加します。

vm.dirty_writeback_centisecs = 1500

設定したら sysctl -p するかOSごと再起動しましょう。

mlocateを行なう頻度を少なく

locateコマンドのデータベースを作成する mlocate はデフォルトでは /etc/cron.daily にあるので1日1回動いてしまいます。これが動くと大量のディスク書き込みが発生するので、locateのデータベースを最新にしなくても良い場合、この mlocate は /etc/cron.weekly にでも移動しておきます。

/tmpはtmpfsに

/tmpは再起動するとどうせ消えるデータなので、SSDへの書き込みを少なくするために tmpfs でマウントするようにします。具体的には /etc/fstab に以下の行を追記して再起動します。

tmpfs /tmp tmpfs defaults,size=512m 0 0

512m(=512MB)となっているところはお好みのサイズにしてください。

mountする際はnoatimeオプションをつける

デフォルトでは読み込みが発生する度にファイルの最終アクセス時刻が更新されてしまいますが、これも寿命を縮めてしまうので、noatimeオプションを導入します。(ただし、アクセス時刻を記録したい場合はこのオプションは導入しないでください)

具体的には /etc/fstab で

UUID=8bac1db5-e2c6-495f-b3ce-7390dea9392a / ext3 relatime,errors=remount-ro 0 1

と relatime となっているところを noatime にします。

UUID=8bac1db5-e2c6-495f-b3ce-7390dea9392a / ext3 noatime,errors=remount-ro 0 1

[tmkm-amazon]B004YA8I9M[/tmkm-amazon]