7/14 長田研勉強会 〜Vagrantfileを読もう!〜

2014/7/15 長田研勉強会

Vagrantfileをいじってみよう

  • APIのversionの記述

[code]
7: VAGRANTFILE_API_VERSION = "2"
[/code]

defaultで2です。
ここは触る事ないかな.


vagrantを用いたVM用内部ネットワークの構築

Vagrantfileの編集
  • private network設定箇所

[code lang=bash]
25 # Create a private network, which allows host-only access to the machine
26 # using a specific IP.
27 config.vm.network "private_network", ip: "192.168.33.10"
[/code]

27行目のコメントを解除してあげることでVMに指定したアドレスを与えてあげることができる.
ここでは192.168.33.10を指定.

  • 適用前

[code lang=bash]
eth0 Link encap:Ethernet HWaddr 08:00:27:A0:BE:F4
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea0:bef4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:195 errors:0 dropped:0 overruns:0 frame:0
TX packets:134 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23579 (23.0 KiB) TX bytes:18483 (18.0 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[/code]

  • 適用後

[code lang=bash]
[vagrant@localhost ~]$ ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:A0:BE:F4
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea0:bef4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:840 errors:0 dropped:0 overruns:0 frame:0
TX packets:717 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:68769 (67.1 KiB) TX bytes:57360 (56.0 KiB)

eth1 Link encap:Ethernet HWaddr 08:00:27:B9:BC:96
inet addr:192.168.33.10 Bcast:192.168.33.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feb9:bc96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:800 (800.0 b) TX bytes:4482 (4.3 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:672 (672.0 b) TX bytes:672 (672.0 b)
[/code]

eth1のNICが立ち上がり, 指定したPrivate IPが割り当てられています

ちなみに, vagrantで作ったVMのeth0にはいずれも10.0.2.15が割り当てられています
なので, vagrant sshの際には接続するportを変えることでVMを区別しています.
(それがpublic_networkで固定アドレスを振ることが出来るメリットに繋がる訳です)

varant upすると以下のような記述が確認できると思います.

[code lang=bash]
default: Adapter 1: nat
default: Adapter 2: hostonly ← Adapter 2(eth1)にhost-only Networkが割り当てられています
[/code]

  • dhcpでもPrivate_ipを付与

[code lang=bash]
27 config.vm.network "private_network", type: "dhcp"
[/code]

↓ 適用後

[code lang=bash]
[vagrant@localhost ~]$ ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:A0:BE:F4
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea0:bef4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:372 errors:0 dropped:0 overruns:0 frame:0
TX packets:242 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40868 (39.9 KiB) TX bytes:32215 (31.4 KiB)

eth1 Link encap:Ethernet HWaddr 08:00:27:B9:BC:96
inet addr:172.28.128.4 Bcast:172.28.128.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feb9:bc96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3180 (3.1 KiB) TX bytes:1592 (1.5 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[/code]

どうやらdhcpだと172.28.128.0/24 帯のアドレスが渡されるっぽいですね

public_networkの検証

以下の3台での疎通検証

  • VM1:192.168.33.10
  • VM2:192.168.33.11
  • HOST:$ ifconfig vboxnet1

  • vboxnet1: flags=8843 mtu 1500
    inet 192.168.33.1 netmask 0xffffff00 broadcast 192.168.33.255

全てのパターンにおいてpingの疎通が確認できました.

HostのNetworkInterfaceから見るに, HOST側がゲートとなり他のVMとの通信を取り持っている模様.

  • Hostからssh確認

[code lang=text]
e115756% ssh vagrant@192.168.33.10
vagrant@172.28.128.4's password:
grant@localhost ~]$
[/code]

問題なくできますね.

まとめ

  • public_network はHost-VM間の通信が可
  • public_network はVM-VM間の通信も可
  • dhcp 又は 静的アドレスを割り当てられる
  • サーバー立てをするときはアドレス変わると厄介なので静的に指定
  • 適当にアドレス振ってもいいならdhcpでも

vagrantを用いたVM用外部ネットワークの構築

Vagrantfileの編集
  • public network の設定

[code lang=bash]
30 # Create a public network, which generally matched to bridged network.
31 # Bridged networks make the machine appear as another physical device on
32 # your network.
33 config.vm.network "public_network" ← コメント解除
[/code]

  • 使用するnicの指定

[code]
% vagrant reload
==> default: Attempting graceful shutdown of VM…
==> default: Clearing any previously set forwarded ports…
==> default: Clearing any previously set network interfaces…
==> default: Available bridged network interfaces:
1) en1: Wi-Fi (AirPort)
2) en0: Ethernet
3) en2: Thunderbolt 1
4) p2p0
default: What interface should the network bridge to? 1 ← en1のWi-Fiを指定
==> default: Preparing network interfaces based on configuration…
default: Adapter 1: nat
default: Adapter 2: bridged ← これが追加されます
==> default: Forwarding ports…
[/code]

  • host側のactiveなNetwork Interface

[code]
en1: flags=8863 mtu 1500
ether e0:f8:47:13:31:5c
inet 192.168.1.105 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=1
media: autoselect
status: active
[/code]

  • guest側のeth1

[code]
eth1 Link encap:Ethernet HWaddr 08:00:27:B9:BC:96
inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feb9:bc96/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:95 errors:0 dropped:0 overruns:0 frame:0
TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10118 (9.8 KiB) TX bytes:2048 (2.0 KiB)
[/code]

hostとguestで同帯のアドレスが振られていますね.(仕様です)

hostを有線で繋ぎグローバルアドレスを与えていれば, guestの方にもグローバルIPを与える事が可能です.
ただしその場合, vagrant userやvagrant passwordは変更しないと脆弱性の塊になってしまうので注意しましょう.

まとめ

  • hostにぶら下がっている形ではなく, bridgeという形でguestにアドレスを持たせた形態.
  • 別のVMはおろかyomitanサーバーなど外部からのsshも可。(グローバルアドレスを持たせている場合)
  • セキュリティに注意

ちょっとした追加設定

  • memoryとcpuコア数の変更

[code lang=ruby]
49 config.vm.provider "virtualbox" do |vb|
50 # # Don't boot with headless mode
51 # vb.gui = true
52 #
53 # # Use VBoxManage to customize the VM. For example to change memory:
54 # vb.customize ["modifyvm", :id, "–memory", "1024"]
55 vb.memory = 1024 ← 単位はMB
56 vb.cpus = 2 ← core数
57 end
[/code]


感想

  • Vagrantfileは他にも色々と設定項目があるのでもうちょっと見ようかなー、と。
  • ある程度vagrantに関してはマスターしたんじゃないか感。
  • 大学などのdhcpでグローバルが振られるような特別な環境じゃなけりゃ, public_networkの構成でもプライベートアドレスが振られるので同一LAN内からしかVMにアクセス出来ないんですよね.
    個人的にはあまり使い時なさそうだなー. NATで満足.
  • 講師役, 今回は楽回だったのでは疑惑.

  • 結果的にはね. 一応予習頑張ったよ. ← (じゃあ次もやろうか, と言われるフラグ回避用)
  • とりあえずお疲れさまでしたー(・∀・)

    追記

    syntacs highrighter なるものを導入してみた.
    見やすいかな?
    ダブルクォーテーションが上手く表示されてないけど, めんどくさくて直すの諦めた…
    あと, 大なりと小なりも…

    追記の追記

    ↑↑ codeタグ(って言うのかな?)で"を回避しました.
    そんな記述方式あったのね..

    11/6 加筆訂正

    7/10 ngt研勉強会

    長田研勉強会(初の全markdown記述投稿 前回のは半々)

    CentOS7.0のvagrant環境構築

    新しくCentos7がreleaseされたので, 遊ぶ用のVMを建てましょう
    まず、isoイメージを手元に用意します.

    • isoイメージのダウンロード
    # scp yomitan:/net/open/CentOS/CentOS-7.0-1406-x86_64-DVD.iso ~/iso/centos/
    

    or

    # scp e115756@yomitan.ie.u-ryukyu.ac.jp:/net/open/CentOS/CentOS-7.0-1406-x86_64-DVD.iso ~/iso/centos/
    

    では、VirtualBoxで箱を作りましょう

    • virtualboxを起動.
    • 新規で”CentOS7_x65″を作成.
    • Linux, Redhat 64bit
    • Memory 1024MB
    • Strage_type vmdk, 20GB, 可変
    • Audio, USB, フロッピー無効化
    • CentOSのインストール

    • 起動してisoイメージを選択
    • minimal Install を選択
    • rootのpasswordをvagrantに
    • しばらく待機

    以下VM内での作業です

    NICの起動
    • 初期設定では死んでるnicを立ち上げます
    vagrant~$ nmtui
    
    • enp0s3をeditします
    • Automatically connectにチェックを入れてok
    SELinuxの無効化
    • SELinuxの無効化
    vagrant~$ vi /etc/selinux/config
    
    • enabled を disabled に
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    # enforcing - SELinux security policy is enforced.
    # permissive - SELinux prints warnings instead of enforcing.
    # disabled - No SELinux policy is loaded.
    SELINUX=disabled ← 変更
    # SELINUXTYPE= can take one of these two values:
    # targeted - Targeted processes are protected,
    # minimum - Modification of targeted policy. Only selected processes are protected.
    # mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    

    SELinuxはセキュリティ管理の上では大切だが, 慣れてないとSELinuxによる強力なアクセス制限によってインストール作業で躓くので切っちゃいましょう.

    sshの設定
    • sshd_configの設定
    [vagrant@localhost]$ vi /etc/ssh/sshd_config
    
    • 変更箇所
    46
    47 #LoginGraceTime 2m
    48 PermitRootLogin no ← 変更
    49 #StrictModes yes
    |
    |
    129 #ShowPatchLevel no
    130 UseDNS no ← 変更
    131 #PidFile /var/run/sshd.pid
    
    • sshd の再起動
    [vagrant@localhost]$ systemctl restart sshd.service
    
    vagrantユーザーの追加
    • userの追加
    [vagrant@localhost]$ useradd vagrant
    
    • passwordの設定
    [vagrant@localhost]$ passwd vagrant
    
    • passwordを”vagrant”にして2回正しく入力してください
    • vagrantユーザーをroot_userに追加
    [vagrant@localhost]$ visudo
    
    • 変更箇所
    56 #Defaults requiretty ← コメントアウト
    |
    97 ## Allow root to run any commands anywhere
    98 root ALL=(ALL) ALL
    99 vagrant ALL=(ALL) NOPASSWD: ALL ← 追記
    
    ssh鍵の設定

    vagrantユーザーで実行.

    • .sshの作成
    [vagrant@localhost]$ mkdir .ssh
    [vagrant@localhost]$ chmod 700 .ssh
    
    • public_keyをgitlubから落としてきます.
    [vagrant@localhost]$ curl -L -o ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
    [vagrant@localhost]$ chmod 600 ~/.ssh/authorized_keys
    
    yum大会
    [vagrant@localhost]$ yum install kernel-devel gcc perl bzip2
    
    Insert Guest Additionsの適用

    まず始めにyum updateしときましょう.
    そうしないとkernelのバージョンが合わなくて後で困る.

    • yum update
    [vagrant@localhost]$ yum update
    
    • 再起動
    [vagrant@localhost]$ shutdown -r now
    

    んで、次に、
    VirtualboxでVMを起動した状態のメニューバーから[Devices]->[InsertGuestAdditions]を選択.

    • Insertguestadditionsの設定
    [vagrant@localhost]$ mount /dev/cdrom /mnt/
    [vagrant@localhost]$ sudo sh /mnt/VBoxLinuxAdditons.run
    
    • errorが出るので, それの対応
    [vagrant@localhost]$ cp /usr/include/linux/version.h /lib/modules/`uname -r`/build/include/linux/version.h
    [vagrant@localhost]$ vi /opt/VBoxGuestAdditions-4.3.12/src/vboxguest-4.3.12/vboxguest/r0drv/linux/memobj-r0drv-linux.c
    
    • 変更箇所
    1536 # if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) ← 変更
    1537 pTask->mm->numa_next_reset = jiffies + 0x7fffffffUL;
    1538 # endif
    1539 pTask->mm->numa_next_scan = jiffies + 0x7fffffffUL;
    1540 # else
    1541 # if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) ← 変更
    1542 pTask->mm->numa_next_reset = jiffies + 0x7fffffffffffffffUL;
    1543 # endif
    1544 pTask->mm->numa_next_scan = jiffies + 0x7fffffffffffffffUL;
    
    • 適用
    [vagrant@localhost]$ /etc/init.d/vboxadd setup
    
    iptablesの停止

    iptablesの名称が変わっている事に注意.

    • iptablesの停止
    [vagrant@localhost]$ systemctl stop firewalld.service
    [vagrant@localhost]$ systemctl disabled firewalld.service
    

    これで一応CentOS7の環境構築は終わり.
    packageしてbox addして, っていう作業は今までと同じなので割愛.


    感想

    Vagrant便利!! ←まさにこれです.
    今度からCentOS7もぶっ壊しまくりですね.

    今回はCentOS7をvagrant用にbox化しよう、という試みでしたが, 率直な感想としてはいつも悩まされるvagrant周りの設定ではなく, OS側の設定で躓くっていう…

    具体的にはVirtualBoxのInsertGuestAdditionsの設定ですね.

    kernelのバージョンがどう, とか
    このファイルがここにないからcpしろ, とか
    そのへんまでは理解できてましたが, もうめんどくさくなってyotaさんのblog見て一気に解決.(チート)

    CentOSの触り心地としては, なんかCentOSの味が抜けたな、って.w
    自分の中ではFedoraとCentOSを主に触っていたので, 頭の中で操作方法を差別化していたのですが, それらが少しごちゃ混ぜになっちゃった, というような操作感.

    簡単に言うと, Fedoraと操作似てややこしいじゃーー!!

    という感じ.

     

    とりあえず基本操作から慣れて行こうかな.

     

    …syntax highrightも入れた方が見やすい…?

    7/1 ngt研勉強会

    vagrantを使ってwebサーバーの構築!!

    はい, 内容は以下にまとめてあります.
    ngt研勉強会7/1議事録

    ngt研のLDAP認証通さないと見れないです.

    本当ならちゃんと書いて公開した方がいいんだろうけど
    もうめんどいからいいや, どうせ見てる人ngt研の人くらいだろうし.
    という姿勢です.

    すみません.

     

    (.mdで書いたのをwikiにまとめた時点でmdファイル消しちゃったので, もう一度wordpressにまとめるという作業がめんどくさかったって話)

     

    感想

    vagrantの.pub_keyをgithubから取ってくるって何ぞや?

    って最初思ってたんですが, やはりあれはいけない行為だったのね.

    そういやCentOS7のboxもまだvagrantユーザーしか作ってなかったので,
    他のユーザ作って, pass作って, ssh_key渡してあげないとね.

    そして/bin/falseだっけ, それもやっておこう.

     

    今回はapacheサーバーを建てたんですが,
    今度やる機会があるのならちょっと個人的に敷居が高いと思っているNginxを構築してみたいですね.

    なにはともあれ, vagrant便利.

    wordPressにMarkdownを!!

    タイトルの通り, このWordPressにMarkdownのPluginを導入しました.

     

    なんか自分のアカウントじゃ新規追加できなかったから,
    admin権限使わせて頂いたのだが, 良かったのだろうか. w

     

    とりあえず
    ダッシュボードの左メニューバーから[プラグイン]を選んで,
    [Jetpack Markdown]にcheckを入れれば完了っぽいです.

    ただ, markdownの外観がblogのテーマによって結構変動するので, 見にくいなーって人はテーマ変更した方がいいかも.

    そもそも, もっとちゃんと表示してくれるようなPluginもあるのかもしれないけどね.

     

    ちなみにオススメのテーマは,[Win7blog]か,[Bizmag]です.

    私が今使ってるのは前者.

    この投稿はmarkdownではないですが, ngt研勉強会の投稿などはmarkdownでやってます.
    参考までに.

     

    追記ネタ

    全部のテーマ漁ってたらBlockStockっていうテーマで適用したときに
    phpの記述が間違ってるっぽくて画面真っ白になって結構焦った.

    調べてみると, なんとこんな記事が. w
    BlockStock Themeは危険らしい

    このblog記事とまったく同じ記述が見つかったので
    前述のテーマは削除しました.

    メールの送信logとか残ってたら見たかったんだけどなー.

    残念.

    Hello world!

    Welcome to 琉球大学情報工学科. This is your first post. Edit or delete it, then start blogging!