AWS EC2

AWSの記事を書き直します。
前回はごちゃごちゃしてて分かりづらかった。
やっぱり一つ一つ書いていきます。

どうせならより多くの機能を試してみたい。

EC2でWebAP構築

 ↓
RDSでWebAP-DB構築
 ↓
AMIでEC2のイメージ化、複製
 ↓
ELBで冗長化
 ↓
ElastiCacheでセッション管理
 ↓
S3にアクセスログ保存
 ↓
(できれば)SQSでWebAP連携

以上を目標とする。

EC2 (Elastic Compute Cloud)

仮想マシン
AMIというテンプレートから作成可能。
AMIは標準でたくさんのものが用意されている。
無料枠ではAmazonLinux、RHELCentOSUbuntu、SuseLinux

それでは早速作ってみよう。

前提
  • AWSアカウント登録済み
手順

  1. EC2画面
    f:id:sfujimoto:20150331000606p:plain

    AWSのメニュー一覧です。
    画面下部が切れているが、ほんとたくさんある。
    各メニューには更にオプションがたくさんある。
    把握しきれまてん。

    EC2を選択する。

  2. EC2作成
    f:id:sfujimoto:20150331000610j:plain

    Launch Instanceを選択する。

  3. AMI選択
    f:id:sfujimoto:20150331000614j:plain

    私はCentOS派だ。
    左メニューからAWS Marketplaceを選択。
    CentOS 7を選択。

  4. インスタンスタイプ選択
    f:id:sfujimoto:20150331000616j:plain

    CPU、MEM、ディスク、ネットワークの性能を選択できる。
    t2.microを選択。
    これ唯一の無料枠インスタンスタイプです。

  5. インスタンス設定
    f:id:sfujimoto:20150331000619j:plain

    なんか色々設定できる。

  6. ディスク設定
    f:id:sfujimoto:20150331000622j:plain

    サイズを選択できる。
    Storageタイプを選択できる

  7. タグ設定
    f:id:sfujimoto:20150331000625j:plain

    です。

  8. セキュリティグループ設定
    f:id:sfujimoto:20150331000628j:plain

    ファイアウォールに位置します。
    Source IP、Dest Portでフィルタリング可能。
    EC2インスタンスはリモートコンソール機能はないため、
    Linux系OSはSSHアクセスするためのポートを開放する必要がある。
    今回はWebアクセスもするのでHTTPも開放する。

  9. 確認・作成
    f:id:sfujimoto:20150331000631j:plain

    Launchを選択。

  10. キーペア作成・選択
    作成していない場合、キーペアを作成します。

    Instanceの作成が始まります。

    f:id:sfujimoto:20150331000634j:plain

    View Instanceを選択

  11. 起動
    作成が完了すると自動で起動してきます。
  12. 接続
    キーペア作成時にダウンロードした証明書ファイルを使用して、
    SSH接続でログインする。
    AMIにCentOSを選択した場合、centosユーザでログインできます。
    AMIにAmazonLinux、RHELを選択した場合、ec2-userユーザでログインできます。
  13. apache起動

    # systemctl enabled httpd
    # systemctl start httpd
    # ps -ef |grep httpd


  14. webアクセス
    WebブラウザからEC2のPublic DNSへアクセス
    http:///

    Apacheのサンプルページが表示されれば、アクセス成功!


いかがでしょうか?
今回はEC2インスタンス作成、接続をしました。
こんなに簡単にVMを手に入れることができました。
英語ですが項目が分かり易いですし、
ググれば誰かしら説明してくれている方がいるので敷居は低いです。

次回はRDSを作って、繋いでを実施します。

それにしても、キャプチャ貼りだすと、一気にめんどくさくなる。。

Webアプリケーション on EC2 and RDS

AWSを使ってみた
無償枠でより多くの機能を使ってみたい

とりあえずは基本のEC2とRDSを連携させたWebアプリケーションを構築してみる。
WEB/AP - DBの構成

機能

  • ログイン
    • データベースに登録されたID/PASSと一致した場合、アカウント一覧画面を表示する
    • データベースに登録されたID/PASSと一致しない場合、ログイン画面を再表示して、エラーメッセージを表示する
  • アカウント一覧表示
    • データベースに登録されたIDを一覧で表示する
    • 有効フラグが立っていないIDは表示しない
  • アカウント追加
    • 入力された情報でデータベースへレコードを追加する

構成

  • Web/APサーバ

 EC2
 OS : CentOS7
 AP : Django

  • DBサーバ

 RDS
 DB : MySQL

前提

  • AWS契約済み
  • KeyPair作成済み、ローカルに証明書ファイルがあること

手順

  1. EC2インスタンス作成
     AMIはCentOS7を利用

  2. RDSインスタンス作成
     MySQLを選択
     EC2インスタンスと同じVPC、同じSubnetを選択
     EC2インスタンスと同じSecurityGroupを選択
     DB nameはtestsitedb

  3. SecurityGroup
     Sourceに選択したセキュリティグループ
     ポートにRDSのポート番号を入力(今回はMySQLのデフォル3306)

  4. OSログイン
     EC2はコンソール接続はない。
     個人的には衝撃の事実
     OSのNW系障害が発生したらどうするんだろ。。

    # ssh -i <証明書> centos@<PublicIP>
    $ sudo su -


  5. MySQLクライアントインストール
     パッケージインストール

    # yum install mysql mysql-dev gcc python-devel
    Loaded plugins: fastestmirror
    
    ・・・(略)・・・
    
    Installed:
      mariadb.x86_64 1:5.5.41-2.el7_0
    
    Dependency Installed:
      perl.x86_64 4:5.16.3-283.el7             perl-Carp.noarch 0:1.26-244.el7            perl-Encode.x86_64 0:2.51-7.el7
      perl-Exporter.noarch 0:5.68-3.el7        perl-File-Path.noarch 0:2.09-2.el7         perl-File-Temp.noarch 0:0.23.01-3.el7
      perl-Filter.x86_64 0:1.49-3.el7          perl-Getopt-Long.noarch 0:2.40-2.el7       perl-HTTP-Tiny.noarch 0:0.033-3.el7
      perl-PathTools.x86_64 0:3.40-5.el7       perl-Pod-Escapes.noarch 1:1.04-283.el7     perl-Pod-Perldoc.noarch 0:3.20-4.el7
      perl-Pod-Simple.noarch 1:3.28-4.el7      perl-Pod-Usage.noarch 0:1.63-3.el7         perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
      perl-Socket.x86_64 0:2.010-3.el7         perl-Storable.x86_64 0:2.45-3.el7          perl-Text-ParseWords.noarch 0:3.29-4.el7
      perl-Time-Local.noarch 0:1.2300-2.el7    perl-constant.noarch 0:1.27-2.el7          perl-libs.x86_64 4:5.16.3-283.el7
      perl-macros.x86_64 4:5.16.3-283.el7      perl-parent.noarch 1:0.225-244.el7         perl-podlators.noarch 0:2.5.1-3.el7
      perl-threads.x86_64 0:1.87-4.el7         perl-threads-shared.x86_64 0:1.43-6.el7
    
    Dependency Updated:
      mariadb-libs.x86_64 1:5.5.41-2.el7_0
    
    Complete!


  6. 接続試験

    # mysql -h <RDS Endpoint> -u <db user> -p
    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MySQL connection id is 154
    Server version: 5.6.22-log MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


  7. djangoインストール

    # easy_install pip
    Searching for pip
    Reading https://pypi.python.org/simple/pip/
    Best match: pip 6.0.8
    Downloading https://pypi.python.org/packages/source/p/pip/pip-6.0.8.tar.gz#md5=2332e6f97e75ded3bddde0ced01dbda3
    Processing pip-6.0.8.tar.gz
    Writing /tmp/easy_install-hvl4ts/pip-6.0.8/setup.cfg
    Running pip-6.0.8/setup.py -q bdist_egg --dist-dir /tmp/easy_install-hvl4ts/pip-6.0.8/egg-dist-tmp-UeBzQD
    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
    Adding pip 6.0.8 to easy-install.pth file
    Installing pip script to /usr/bin
    Installing pip2.7 script to /usr/bin
    Installing pip2 script to /usr/bin
    
    Installed /usr/lib/python2.7/site-packages/pip-6.0.8-py2.7.egg
    Processing dependencies for pip
    Finished processing dependencies for pip
    
    # pip list
    backports.ssl-match-hostname (3.4.0.2)
    boto (2.25.0)
    chardet (2.0.1)
    Cheetah (2.4.4)
    cloud-init (0.7.5)
    configobj (4.7.2)
    decorator (3.4.0)
    iniparse (0.4)
    IPy (0.75)
    jsonpatch (1.2)
    jsonpointer (1.0)
    kitchen (1.1.1)
    Markdown (2.4.1)
    Pillow (2.0.0)
    pip (6.0.8)
    policycoreutils-default-encoding (0.1)
    prettytable (0.7.2)
    pycurl (7.19.0)
    Pygments (1.4)
    pygobject (3.8.2)
    pygpgme (0.3)
    pyliblzma (0.5.3)
    pyudev (0.15)
    pyxattr (0.5.1)
    PyYAML (3.10)
    requests (1.1.0)
    seobject (0.1)
    sepolicy (1.1)
    setuptools (0.9.8)
    six (1.3.0)
    urlgrabber (3.10)
    urllib3 (1.5)
    yum-metadata-parser (1.1.4)
    [root@ip-172-31-8-41 ~]# pip install django mysql-python
    Collecting django
      Downloading Django-1.7.7-py2.py3-none-any.whl (7.4MB)
        100% |################################| 7.4MB 74kB/s
    Installing collected packages: django
    
    Successfully installed django-1.7.7


  8. 動作確認

    # django-admin startproject testweb
    # cd testweb/
    # ./manage.py runserver 0.0.0.0:8888
    Performing system checks...
    
    System check identified no issues (0 silenced).
    
    You have unapplied migrations; your app may not work properly until they are applied.
    Run 'python manage.py migrate' to apply them.
    
    March 28, 2015 - 16:39:27
    Django version 1.7.7, using settings 'testweb.settings'
    Starting development server at http://0.0.0.0:8888/
    Quit the server with CONTROL-C.

    Webブラウザ起動してページへアクセス・・・繋がらない

    あ、SecurityGroupで8888ポート開放していない
    EC2のSecurityGroupに戻ってMyIPから8888へのアクセス開放

    もう一回アクセス・・・繋がった


  9. DB設定
     DjangoはデフォルトDB設定がsqlite3を利用する
     DBをRDSのDB情報に設定変更する

    # vi testweb/settings.py
    以下を変更
    ---
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    ---
     ↓
    ---
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': <RDS Endpoint>,
            'PORT': '3306',
            'NAME': 'testsitedb',
            'USER': 'test',
            'PASSWORD': <password>,
        }
    }
    ---
    # # ./manage.py runserver
    Traceback (most recent call last):
      File "./manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
        utility.execute()
      File "/usr/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
        django.setup()
      File "/usr/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/usr/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
        app_config.import_models(all_models)
      File "/usr/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
        self.models_module = import_module(models_module_name)
      File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/usr/lib/python2.7/site-packages/django/contrib/auth/models.py", line 40, in <module>
        class Permission(models.Model):
      File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 122, in __new__
        new_class.add_to_class('_meta', Options(meta, **kwargs))
      File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 297, in add_to_class
        value.contribute_to_class(cls, name)
      File "/usr/lib/python2.7/site-packages/django/db/models/options.py", line 166, in contribute_to_class
        self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
      File "/usr/lib/python2.7/site-packages/django/db/__init__.py", line 40, in __getattr__
        return getattr(connections[DEFAULT_DB_ALIAS], item)
      File "/usr/lib/python2.7/site-packages/django/db/utils.py", line 242, in __getitem__
        backend = load_backend(db['ENGINE'])
      File "/usr/lib/python2.7/site-packages/django/db/utils.py", line 108, in load_backend
        return import_module('%s.base' % backend_name)
      File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/usr/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 18, in <module>
        raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
    django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

    MySQLdbモジュールがないらしい
    というか色々ないらしい。

    # yum install mysql-devel gcc python-devel
    # pip install mysql-python
    # ./manage.py migrate
    Operations to perform:
      Apply all migrations: admin, contenttypes, auth, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying sessions.0001_initial... OK

    なんか色々作られた。

    # mysql -h <RDS Endpoint> -u test -p
    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MySQL connection id is 167
    Server version: 5.6.22-log MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MySQL [(none)]> use testsitedb
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MySQL [testsitedb]> show tables
        -> ;
    +----------------------------+
    | Tables_in_testsitedb       |
    +----------------------------+
    | auth_group                 |
    | auth_group_permissions     |
    | auth_permission            |
    | auth_user                  |
    | auth_user_groups           |
    | auth_user_user_permissions |
    | django_admin_log           |
    | django_content_type        |
    | django_migrations          |
    | django_session             |
    +----------------------------+
    10 rows in set (0.00 sec)

    データベースにテーブルが作成されていた。


今日はここまで。。
全然出来なかった。

EC2とRDSが連携出来たので目的は達成かな。

Fluentd(インストール編)

SSHクライアントツールって何を使っている?
私はMacではiTerm2、Winではputty使ってた。
元々、プライベート端末も業務端末もWinだったので、
putty一択で不満はありながらも使ってた。
プライベート端末をMacに変えてiTerm2を使いはじめると、
puttyへの不満が募っていった。
特に開発時にサーバ繋げまくりのウィンドウ開きまくりがいけないのだが、
開きたいウィンドウが分からなくなる。
その点、iTerm2は分割表示もタブ表示もできる。
WinはTeraTermputty以外を探したことがないわけではないのですが、
改めて最近Google先生に尋ねてみたところ、、、あった。

Poderosa

ポルトガル後らしく直訳するとパワフル。シンプル 笑
UIが素晴らしい。
分割表示、タブ表示はもちろんSSHセッション一つ一つにショートカットキーが割り当てたり、
分割のどこに割り当てるから自由に選択可能。
捗る。
ぜひ試してみてください。

Fluentd

さて、本題。
前々からよく耳にはしていたものの試せていなかったFluentdにようやく手を伸ばしました。
イメージとしては

  • 柔軟
  • 導入が簡単
  • 既存システムに影響を与えない
  • OSS

いいことだらけ?
そんな美味しい話ある?
あとで壺とか買わされない?

とりあえず試してみる。

本家サイトのトップページに書いてあるように

  • 入力
  • フィルター/バッファ
  • 出力

の流れで形成される。
単純に入力 -> 出力だけでもよい。

冗長化された複数のWebサーバのaccess_logをサーバ単位でタグ付けして集約して運用改善、とかそんな感じかな。

とりあえずインストールしてみた。

  • OS : CentOS7
インストール

本家サイトにあるがコマンド一発でインストールできます。

# curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh |sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   660  100   660    0     0  19078      0 --:--:-- --:--:-- --:--:-- 19411
This script requires superuser access to install rpm packages.
You will be prompted for your password by sudo.
curl: (6) Could not resolve host: packages.treasuredata.com; Unknown error
error: http://packages.treasuredata.com/GPG-KEY-td-agent: import read failed(2).
Loaded plugins: fastestmirror
base                                                                                                                                                                                                                  | 3.6 kB  00:00:00     
extras                                                                                                                                                                                                                | 3.4 kB  00:00:00     
treasuredata                                                                                                                                                                                                          | 2.9 kB  00:00:00     
updates                                                                                                                                                                                                               | 3.4 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package td-agent.x86_64 0:2.1.5-0 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================================================================================================
 Package                                                  Arch                                                   Version                                                  Repository                                                    Size
=============================================================================================================================================================================================================================================
Installing:
 td-agent                                                 x86_64                                                 2.1.5-0                                                  treasuredata                                                  99 M

Transaction Summary
=============================================================================================================================================================================================================================================
Install  1 Package

Total download size: 99 M
Installed size: 215 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
td-agent-2.1.5-0.x86_64.rpm  |  99 MB  00:00:43     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : td-agent-2.1.5-0.x86_64        1/1 
adding 'td-agent' group...
adding 'td-agent' user...
prelink detected. Installing /etc/prelink.conf.d/td-agent-ruby.conf ...
Configure td-agent to start, when booting up the OS...
  Verifying  : td-agent-2.1.5-0.x86_64        1/1 

Installed:
  td-agent.x86_64 0:2.1.5-0

Complete!
# rpm -q td-agent
td-agent-2.1.5-0.x86_64

簡単。
こぴぺで完了。
つまらないのでshファイルを覗いてみます。

]# cat install-redhat-td-agent2.sh 
echo "This script requires superuser access to install rpm packages."
echo "You will be prompted for your password by sudo."

# clear any previous sudo permission
sudo -k

# run inside sudo
sudo sh <<SCRIPT

  # add GPG key
  rpm --import http://packages.treasuredata.com/GPG-KEY-td-agent

  # add treasure data repository to yum
  cat >/etc/yum.repos.d/td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=http://packages.treasuredata.com/2/redhat/\$releasever/\$basearch
gpgcheck=1
gpgkey=http://packages.treasuredata.com/GPG-KEY-td-agent
EOF

  # update your sources
  yum check-update

  # install the toolbelt
  yes | yum install -y td-agent

SCRIPT

簡単。
予想通りですが。。
yumリポジトリを定義してyum install。

Syslogメッセージのコピー

まずは最もシンプルな設定からどんな感じか味わう。

  • 設定内容

/var/log/messagesに出力されたメッセージを
/var/log/td-agent/copy-messagesファイルへ転送する。

  • 設定ファイル

/etc/td-agent/td-agent.conf

sourceタグとmatchタグで入力と入力に対する処理内容を定義する。

# cat /etc/td-agent/td-agent.conf
<source>
  type tail
  path /var/log/messages
  pos_file /tmp/messages.pos
  format syslog
  tag syslog.messages
</source>

<match syslog.messages>
  type file
  path /var/log/td-agent/copy-messages
</match>

sourceタグ内に入力を定義する。
type tail => ファイルへの入力を追いかける
path => 指定されたファイルパスをtailの対象とする
pos_file => ファイルに対してどこまで処理したかを記録する
format => メッセージ形式の指定(syslogやapache2などがある)
tag => matchで引っ掛けるため

matchタグ内に入力に対する処理内容を定義する
matchで対象となるtagを指定する。*によるワイルドカード指定可能。
type file => ファイルへの出力
path => 指定されたファイルパスに対して出力する

fluentd起動
# /etc/init.d/td-agent restart
Restarting td-agent (via systemctl):            [  OK  ]
# cat /var/log/td-agent/copy-messages.20150325.b5121681c2e412c5c
2015-03-25T14:55:05+09:00	syslog.messages	{"host":"centos7-test","ident":"td-agent","message":"Starting td-agent: [  OK  ]"}
2015-03-25T14:55:05+09:00	syslog.messages	{"host":"centos7-test","ident":"systemd","message":"Started LSB: td-agent's init script."}

標準フォーマットでは日時、タグ、syslogフォーマットを分解したメッセージをJSON形式で記憶する。
確かに導入は簡単だし、
アプリケーションに設定を埋め込むわけではないので、
既存システムへの影響は少ないというのは納得。
ということでインストール編は以上。

次回はもう少し色々な入力プラグイン、出力プラグインを試しつつ、
実用的な検証をしてみよう。

CentOS7(ネットワーク編)

はてなブログはシンプルなところが好きです。

3ヶ月ほど前から検証で利用するLinuxOSはCentOS7をメインとしている。
CentOS6からコマンド周りは変わりましたが、
正直、慣れればそんなに変わった印象はない。

最初、なんじゃこりゃ!ってなったのは

  • ネットワーク周り
  • サービス周り

今回はネットワーク編
と言っても複雑なことを記載するつもりはない。
誰もが通るであろう設定のみを抜粋する。

お題はNetworkManager推奨とよく使っていたコマンドが標準外な件です。

1. NetworkManager推奨

CentOS6では「NetworkManager = 邪魔な奴」⇒ 即無効化、が私の中での当たり前だったが、CentOS7からはNetworkManagerの利用が推奨らしい。
ただし今まで通り、設定ファイルの作成でも動作する。
という割にはバージョン番号が1に達していないじゃん。(20150324現在)

# rpm -q NetworkManager
NetworkManager-0.9.9.1-29.git20140326.4dba720.el7_0.x86_64

NetworkManagerで用意された設定ツールは以下の2つ

  • nmcli (CLI
  • nmtui(GUI

まぁ、CLIだしょ。

nmcli

まずはnmcliのヘルプを表示しました。

# nmcli --help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager

ふむ、OBJECTを指定して、続きはその中なのね。
OBJECTは最短一致っぽい。

# nmcli ge --help

Usage: nmcli general { COMMAND | help }

COMMAND := { status | hostname | permissions | logging }

  status

  hostname [<hostname>]

  permissions

  logging [level <log level>] [domains <log domains>]

ふーん。
とりあえず設定を見てみよう。

ホスト名確認
# nmcli g hostname
localhost
ホスト名設定
# nmcli g hostname centos7-test
(結果は何も表示されない)
# hostname
centos7-test

NetworkManager経由で設定すると即時反映だ。
注意。

# cat /etc/sysconfig/network
# Created by anaconda

あれ?いつものところに追記されるわけじゃないんだ。
ちなみに/etc/sysconfig/networkファイルに
HOSTNAME=***
GATEWAY=***
を追記して再起動してもOSには反映されなかった。
値はどこで持ってるんだろう。。

# cat /etc/hostname
centos7-test

これなのかな?

あ、このペースだと終わらないのでペースアップ。

インタフェース確認
# nmcli c
NAME    UUID                                  TYPE            DEVICE 
ens192  03da7500-2101-c722-2438-d0d006c28c73  802-3-ethernet  ens192 
インタフェースの設定項目確認
# nmcli c s ens192
connection.id:                          ens192
connection.uuid:                        03da7500-2101-c722-2438-d0d006c28c73
connection.interface-name:              --
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.timestamp:                   1427227625
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:                 
connection.gateway-ping-timeout:        0
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
ipv4.method:                            manual
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         { ip = 192.168.1.153/24, gw = 192.168.1.254 }
ipv4.routes:                            
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.routes:                            
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-hostname:                     --
GENERAL.NAME:                           ens192
GENERAL.UUID:                           03da7500-2101-c722-2438-d0d006c28c73
GENERAL.DEVICES:                        ens192
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         ip = 192.168.1.153/24, gw = 192.168.1.254
IP6.ADDRESS[1]:                         ip = fe80::250:56ff:fe97:7a91/64, gw = ::

項目多いなぁ。。

インタフェース有効化

ONBOOTをyesにします。

# nmcli c m ens192 connection.autoconnect yes
# grep ONBOOT /etc/sysconfig/network-scripts/ifcfg-ens192
ONBOOT=yes
IPアドレス設定

IPアドレスをstaticと同時にIPアドレスとデフォルトGWを指定します。

# nmcli c m ens192 ipv4.method manual ipv4.addresses "192.168.1.153/24 192.168.1.254"
# egrep "BOOTPROTO|IPADDR|PREFIX|GATEWAY" /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=none
IPADDR=192.168.1.153
PREFIX=24
GATEWAY=192.168.1.254
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:97:7a:91 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.153/24 brd 192.168.1.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe97:7a91/64 scope link 
       valid_lft forever preferred_lft forever
IPv6無効化

CentOS6から変更なし

# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:56:97:7a:91 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.153/24 brd 192.168.1.255 scope global ens192
       valid_lft forever preferred_lft forever

2. よく使っていたコマンドが使えない

CentOS7を最小インストールすると今まで当たり前のように使っていたコマンドがありません。
net-toolsという標準外パッケージに含まれていますが、
どうせなら標準でやり繰りできるスマートな大人になりたい。
以下、対応表。

用途 CentOS6 CentOS7
IPアドレス確認 ifconfig ip a
ルーティング確認 netstat -rn ip r
arpテーブル確認 arp -a ip n
ソケット確認 netstat -a ss -a

ソケット確認はnetstatで確認できていたものがなんやらかんやらという記載を見た覚えが。。。

Techブログをはじます

日々の技術検証内容を忘れないようにブログで備忘録を残す。

出来れば1回/週の更新はキープしたい。

メインはインフラ技術の基礎をとりあえず押さえていきたいです。

あくまで私個人の見解だったり、検証当時の結果なので、

勘違いだったり、同じことをしても同じ結果にならないかもしれないことはご留意ください。