2014年7月21日月曜日

成長したいので本棚を載せてみる

成長したいエンジニアは良いエンジニアの本棚を真似るといいんじゃない? - Lean Baseballという記事があって、その中で

「本棚を真似る」エンジニアから「本棚を真似られる」エンジニアへ

というお話がありました。確かに本棚を共有するのは、私がどんなことに興味があるのかわかってもらうとても良い方法だと思うので、家の本棚写真を一挙公開です!

なお、ここにある本の他に、実家にあるもの、会社の本棚にあるもの、Kindleで読んでいるものなどあります。これでおすすめ&必読本すべてを網羅しているわけではないですが、比較的最近購入した、またはいただいた本が並んでいるので、興味の反映としてはかなり正確です。マンガ棚は省略しています。

みなさまはどんな本が本棚に並んでいるでしょうか。見てみたいです!

なお、元記事で触れられている「リーン・スタートアップ」は、amazonのwishlistに入ったまま購入には至っておりません...

2014年7月9日水曜日

Systemdコマンド早見表(CentOS 7対応)

CentOS 7ではsystemdが導入されているので、サービスの管理が従来と大きく変わっています。詳しい解説はsystemd徹底入門のスライドを参照するとして、ここでは「前のコマンドはsystemdでどう入力するの?」というのだけ、簡単にまとめてみました。

サービス名にはsshdを指定していますが、もちろん任意のサービスが指定できます。

サービスの起動、終了など

操作SysV InitSystemd
起動/etc/init.d/sshd startsystemctl start sshd
終了/etc/init.d/sshd stopsystemctl stop sshd
強制終了PID探してkill -9systemctl kill -s 9 sshd
再起動/etc/init.d/sshd restartsystemctl restart sshd
設定反映/etc/init.d/sshd reloadsystemctl reload sshd
状態取得/etc/init.d/sshd statussystemctl status sshd
自動起動を有効chkconfig sshd onsystemctl enable sshd
自動起動を無効chkconfig sshd offsystemctl disable sshd
自動起動の状態確認chkconfig --list sshdsystemctl is-enabled sshd(status でも表示される)
サービス一覧の表示ls /etc/init.dsystemctl --type service

追記: SysV Init では service(8) コマンドを利用してサービスの再起動をすることが推奨されていますが、わかりやすさのため /etc/init.d のファイルを直接指定する書き方をしました。

ログのありか

SysV Initを使う場合は、/var/logの下をなんとなく探す、/var/log/messagesをgrepしてみるという使い方が多いと思います。Systemdには専用のjournalctlコマンドが用意されています。

特定のサービスのログを確認
journalctl -u sshd
tail -f
journalctl -f -u sshd
dmesgの代わり
journalctl -k または journalctl --dmesg
ログをJSONで取得
journalctl に -o JSON オプションをつける

その他管理機能

普段は使わないけど、知っておくと緊急時に役に立つかも機能。

シングルユーザーモードに入る
systemctl rescue
マルチユーザーモードに戻る
systemctl default

これで基本的な使い方はばっちり!

DockerをCentOS 7にインストールする方法

CentOS 7ではDockerをフル機能で利用することが可能です。

EPELレポジトリを有効にする

DockerはEPELレポジトリに含まれています。CentOS 7用のEPELレポジトリは現在ベータながら、すでに用意されています。

インストールするコマンドは次の通りです。

$ sudo yum install http://linux.mirrors.es.net/fedora-epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm

Dockerをインストールする

Dockerのパッケージ名は、docker-ioです。これをyumでインストールします。

$ sudo yum install docker-io

インストールした後に、サービスとして起動させるには systemctl start、ブート時に自動的にサービスを起動させるには systemctl enable を使います。

$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service

これでDockerが利用できる状態になりました。 docker version で確認できます。

$ docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0

また、docker infoで、device mapperを利用していることが確認できます。

$ docker info
Containers: 3
Images: 1
Storage Driver: devicemapper
 Pool Name: docker-253:1-23349-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 465.8 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 0.9 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.10.0-123.el7.x86_64

以上で、CentOS 7上でDockerを利用できる状態になりました。

参考: インストールのログ

参考のために、Dockerをインストールした時の進み方を貼り付けておきます。

[yuryu@centos7 ~]$ sudo yum install http://linux.mirrors.es.net/fedora-epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm
Loaded plugins: fastestmirror
epel-release-7-0.2.noarch.rpm                                                                    |  13 kB  00:00:00     
Examining /var/tmp/yum-root-0OMCgR/epel-release-7-0.2.noarch.rpm: epel-release-7-0.2.noarch
Marking /var/tmp/yum-root-0OMCgR/epel-release-7-0.2.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-0.2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                     Arch                  Version              Repository                                 Size
========================================================================================================================
Installing:
 epel-release                noarch                7-0.2                /epel-release-7-0.2.noarch                 22 k

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

Total size: 22 k
Installed size: 22 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : epel-release-7-0.2.noarch                                                                            1/1 
  Verifying  : epel-release-7-0.2.noarch                                                                            1/1 

Installed:
  epel-release.noarch 0:7-0.2                                                                                           

Complete!
[yuryu@centos7 ~]$ sudo yum install docker-io
Loaded plugins: fastestmirror
base                                                                                             | 3.6 kB  00:00:00     
epel/x86_64/metalink                                                                             |  13 kB  00:00:00     
epel                                                                                             | 3.7 kB  00:00:00     
extras                                                                                           | 2.9 kB  00:00:00     
updates                                                                                          | 2.9 kB  00:00:00     
(1/2): epel/x86_64/group_gz                                                                      | 163 kB  00:00:01     
(2/2): epel/x86_64/primary_db                                                                    | 2.0 MB  00:00:47     
Loading mirror speeds from cached hostfile
 * base: centos-distro.cavecreek.net
 * epel: linux.mirrors.es.net
 * extras: centos-distro.cavecreek.net
 * updates: mirror.supremebytes.com
Resolving Dependencies
--> Running transaction check
---> Package docker-io.x86_64 0:1.0.0-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                      Arch                      Version                           Repository               Size
========================================================================================================================
Installing:
 docker-io                    x86_64                    1.0.0-1.el7                       epel                    4.5 M

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

Total download size: 4.5 M
Installed size: 23 M
Is this ok [y/d/N]: y
Downloading packages:
docker-io-1.0.0-1.el7.x86_64.rpm                                                                 | 4.5 MB  00:02:39     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : docker-io-1.0.0-1.el7.x86_64                                                                         1/1 
  Verifying  : docker-io-1.0.0-1.el7.x86_64                                                                         1/1 

Installed:
  docker-io.x86_64 0:1.0.0-1.el7                                                                                        

Complete!
[yuryu@centos7 ~]$ sudo systemctl start docker.service
[yuryu@centos7 ~]$ sudo systemctl enable docker.service
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'

2014年7月8日火曜日

NetworkManagerの設定変更、nmtuiとnmcliについてまとめたよ!

RHEL 7, CentOS 7では、NetworkManager の利用が推奨されています。今まで /etc/sysconfig/network-scripts/ の下や、そのほかのコマンドを利用して行っていた設定が、一元的に設定できるようになっています。

ここでは、よく使うような設定を、実際の利用例とともにまとめてみました。

NetworkManagerをテキストベースで利用するには、大きく分けてnmtuiコマンドnmcliコマンドがあります。それぞれ、テキストベースのUIと、コマンドラインツールになっています。

nmtui

最も簡単に使えるには、nmtuiコマンドです。実行すると、対話的にネットワークの設定を行うことが可能です。以下にスクリーンショットを掲載します。

いかがでしょうか? 基本的な設定はこのUIから可能です。少し変えてみる、初めて使ってみる場合にはこちらを利用するのが簡単です。

nmcli

nmcliを用いると、nmtuiとは対照的に、コマンドベースで設定変更を行うことができます。

nmcliは最後にhelpと入力すると、ヘルプが表示されます。コマンドごとのヘルプも、たとえば"nmcli connection help"や"nmcli conection up help"などのように入力すると表示されます。悩んだらhelpしましょう。

nmcliのコマンドは、前方一致で利用することが可能です。たとえばglobalはg、connectionはcといった具合です。もし一意に特定できない場合はエラーメッセージが表示されます。

それでは、それぞれの設定項目について、具体例を見ていきましょう。

ホスト名の表示、変更はnmcli global hostnameコマンドを利用します。この変更は、systemdで導入されたsystemctlコマンドと同期しています。

[yuryu@centos70 ~]$ nmcli general hostname 
centos70.local
[yuryu@centos70 ~]$ sudo nmcli general hostname centos7.local
[yuryu@centos70 ~]$ hostname
centos7.local
[yuryu@centos70 ~]$ hostnamectl 
   Static hostname: centos7.local
(省略)

NetworkManagerでは、ほとんどの設定が接続単位で保存されます。IPアドレスの設定なども接続ごとに行います。接続の一覧を表示するには、nmcli cと入力します。

[yuryu@centos7 ~]$ nmcli c
NAME         UUID                                  TYPE            DEVICE      
eno16777736  bf75cf80-fbeb-4b8f-b94c-778731bb2446  802-3-ethernet  eno16777736 

ifup / ifdown は nmcli connection up と nmcli connection down に置き換わります。

[yuryu@centos7 ~]$ sudo nmcli connection down eno16777736
[yuryu@centos7 ~]$ sudo nmcli connection up eno16777736
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)

なお、それぞれ nmcil c d, nmcli c u と省略することが可能です。ほかのコマンドも同様です。

接続の情報を取得するには nmcli connection show を使います。

[yuryu@centos7 ~]$ nmcli connection show eno16777736
connection.id:                          eno16777736
connection.uuid:                        bf75cf80-fbeb-4b8f-b94c-778731bb2446
connection.interface-name:              --
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
(ずらずら)

特定の設定のみを表示するには --fields オプションを追加します。

[yuryu@centos7 ~]$ nmcli --fields dhcp4 connection show eno16777736
DHCP4.OPTION[1]:                        requested_domain_search = 1
DHCP4.OPTION[2]:                        requested_nis_domain = 1
DHCP4.OPTION[3]:                        requested_time_offset = 1
(ずらずら)

設定を書き換えるには、nmcli connection modify コマンドを利用します。 書き換えた設定は一度接続を down / up させないと反映されません。

ここの例は、DHCPを無効にして、手動でアドレスを設定する例を示しています。ipv4.addressesは、"アドレス/プレフィックス長 デフォルトゲートウェイ"という形で指定します。

[yuryu@centos7 ~]$ sudo nmcli connection modify eno16777736 ipv4.method manual ipv4.addresses "172.16.105.201/24 172.16.105.2"
[yuryu@centos7 ~]$ # con mod は connection modify の省略形です
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.dns "8.8.8.8 8.8.4.4"
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.dns-search "local"
[yuryu@centos7 ~]$ nmcli --fields ipv4 connection show eno16777736
ipv4.method:                            manual
ipv4.dns:                               8.8.8.8, 8.8.4.4
ipv4.dns-search:                        local
ipv4.addresses:                         { ip = 172.16.105.201/24, gw = 172.16.105.2 }
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
[yuryu@centos70 ~]$ # connection down, connection up をそれぞれ c d, c u と省略できます
[yuryu@centos70 ~]$ sudo nmcli c d eno16777736 ; sudo nmcli c u eno16777736
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14)
[yuryu@centos7 ~]$ cat /etc/resolv.conf 
# Generated by NetworkManager
search local
nameserver 8.8.8.8
nameserver 8.8.4.4

設定の一部を消去したり、追加したりするには、フィールド名の前に -, + をつけます。

[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 -ipv4.dns 1
[yuryu@centos7 ~]$ nmcli --fields ipv4.dns con show eno16777736
ipv4.dns:                               8.8.8.8
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 +ipv4.dns 8.8.4.4
[yuryu@centos7 ~]$ nmcli --fields ipv4.dns con show eno16777736
ipv4.dns:                               8.8.8.8, 8.8.4.4

DHCPに戻すには次のようににします。

[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.method auto
[yuryu@centos7 ~]$ sudo nmcli con mod eno16777736 ipv4.dns '' ipv4.dns-search '' ipv4.addresses ''

デバイスの一覧を表示するには nmcli deviceと入力します。

[yuryu@centos7 ~]$ nmcli device
DEVICE       TYPE      STATE      CONNECTION  
eno16777736  ethernet  connected  eno16777736 
lo           loopback  unmanaged  --  

また、このデバイスに紐付いている情報を表示するには、nmcli device showコマンドを利用します。

[yuryu@centos7 ~]$ nmcli device show eno16777736
GENERAL.DEVICE:                         eno16777736
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno16777736
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/15
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 172.16.105.141/24, gw = 172.16.105.2
IP4.DNS[1]:                             172.16.105.2
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         ip = fe80::20c:29ff:feb3:34dd/64, gw = ::

NetworkManagerとは関係ありませんが、従来ifconfigで見れていた、インタフェースごとの通信量を見るには、ipコマンドを使うと可能です。

[yuryu@centos7 ~]$ ip -s l 
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    340        4        0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    340        4        0       0       0       0      
2: eno16777736:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:00:00:00 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    7926980    13565    0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns 
    1143281    7208     0       0       0       0      

新規の接続の追加はconnection addコマンドで行います。typeでイーサネットを示すethを、ifnameでインタフェース名を、con-nameで新しく追加する接続名を追加します。

# nmcli c add type eth ifname eth1 con-name eth1
# nmcli c mod eth1 ipv4.method manual ipv4.addresses "192.168.122.69/24 192.168.122.1"
# nmcli c down eth1
# nmcli c up eth1

いかがでしょうか。対応さえわかれば、ここ一カ所で操作することが可能で、あっちこっち見なくてよくなるので、意外と簡単ということがわかります。是非disableにせず、使ってみましょう。

CentOS 7 がリリースされたので、情報をまとめてみたよ!

CentOS の新しいメジャーリリース、 CentOS 7がリリースされました

お断り:ここの情報は非公式なもので、ベストエフォートで提供されています。

国内ミラー状況

公式サイトには掲載されていませんが、国内の有力ミラーサイトがすでにミラーを終えています。

バージョン番号の変更

今回からバージョン番号が 7.0-1406、というように、末尾に数字がつくようになりました。 7.0 は upstream である Red Hat Enterprise Linux 7 (RHEL 7)に対応、RHEL 7にupdateが出ると、対応するように 7.1, 7.2 と増加します。1406はリリースされた年月を表します。これは、更新されたメディアイメージをクラウドやコンテナに持って行きやすくするために付いています。ですので、同じ7.0ベースでも、末尾の年月が新しい方は新しいパッケージを含んでいるということになります。

CentOS 7の変更点

RHEL 7にほぼ準拠しますが、リリースノートには以下の項目が示されています。

  • カーネルが 3.10.0 に更新
  • Linuxコンテナのサポート
  • Open VMware Toolsと3Dグラフィックドライバが標準装備
  • OpenJDK 7が標準のJDKに
  • 6.5から7.0にそのまま更新可能
  • ext4とXFSでLVM snapshotが利用可能
  • systemd, firewalld, GRUB2の採用
  • XFSが標準のファイルシステムに
  • iSCSIとFCoEがカーネル空間に移動
  • PTPv2, 40GbE, 互換性のあるハードウェアでのUEFI Secure bootのサポート

あわせて読みたい: Red Hat Enterprise Linux 7 の新機能

FAQ

なぜか公式のFAQ一覧にリンクが張られていませんが、CentOS 7用のFAQが既に存在します。詳しくはそちらを参照していただくとして、結構重要そうなものを軽くピックアップ。

  • boot.iso は netinstall.iso に名前が変わりました
  • イーサネットのネットワークインタフェースは標準では有効になりません
  • /etc/sysconfig/network-scripts/ を直接編集するのではなく、NetworkManagerを使いましょう(追記: 基本的な設定方法をまとめました)
  • ネットワークインタフェースの名前が変わってます。慣れましょう
  • 32bit CPUは切り捨てられました
  • IPv6 を無効にするのは時代遅れのテクです

既知の問題

リリースノートに書かれている既知の問題は次の通り(2014年7月8日現在)。

  • ネットワークインタフェースが標準では有効にならない。これはRHEL 7での変更によるもので、仕様変更である。詳しくはFAQを参照(英語)
  • インストーラーは最低406MBのメモリを要求する。CentOS 7の必要メモリ量は 512MB である
  • VirtualBoxのUEFIモードで、ファイルシステムの暗号化を有効にした状態でインストールすると、システムが起動しない。バグレポートを参照のこと
  • 画面の解像度が800x600より小さい場合に、インストール画面の下部のボタンが途切れる
  • .isoイメージのルートディレクトリにあるEULAが古く、テスト用のまま。正しいEULAはインストール後に /usr/share/centos-release/EULA で参照可能

UpstreamであるRHEL 7のknown issuesも参照のこと(英語)