firewalldにsshポート追加

複数のポートでssh接続を受けるを設定してもfirewalldが動作していると50022ポートの接続はできない。firewalldに追加のsshのポートで接続できるように設定を変更する。
firewalldの状況確認

firewalldのコマンドラインクライアントのfirewall-cmdを使用して確認する。まずデフォルトのゾーンのサービスを確認する。

# firewall-cmd --list-service
dhcpv6-client ssh
#

systemdでのサービスの起動、停止、状況確認

systemdでサービス等の起動、停止を行う際にはsystemctlコマンドを使用する。systemdではユニットという単位で管理している。ここではserviceでしか作業していないが他にもdevice、mountなど他にもある。

実行中のユニットを表示

# systemctl
UNIT                              LOAD   ACTIVE SUB     DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File
(以下省略)

複数のポートでssh接続を受ける

/etc/ssh/sshd_configに

Port 22
Port 50022
の2行を記述すれば22、50022ポートでssh接続できる。

firewalldで50022ポートがブロックされている場合はfirewalldにsshポート追加を参考に設定する。

/(ルート)の一部を別ディスクに移動

今回はOS起動時に自動mountで作成したファイルシステムを/varとして使用するようにシステムを変更する。まず レスキューモードでの起動してコピーする。
作業前の状況確認

# mount -t xfs
/dev/mapper/centos_adam-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/test-lv01 on /work type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
(以下省略)
今回は/workにマウントされている/dev/mapper/test-lv01を/varとして使用する。

レスキューモードでの起動

レスキューモードでの起動

レスキューモードでの起動を参考にした。

  • GRUB2のboot画面でeを押し編集画面に入る
  • linux16かlinuxefiの行の最後にsystemd.unit=rescue.targetを追記。ctrl+eで行の最後に移動できる
  • ctrl+xでこのパラメータで起動する
起動すると以下の入力画面になる
Welcome to rescue mode! Type "systemctl default" or ^D to enter default mode.
Type "journalctl -xb" to view system logs. Type "systemctl reboot" to reboot.
Give root password for maintenance
(or type Control-D to continue):rootのパスワードを入力
#

OS起動時に自動mount

xfsのフォーマットで/dev/mapper/test-lv01に作成したファイルシステムをOS起動時に自動で/workにマウントする。
自動mount設定

/etc/fstabに以下を記述すればマウントされる。

/dev/mapper/test-lv01   /work   xfs     defaults        0       2
1番目のフィールド
マウントするブロックデバイス
2番目のフィールド
マウントポイント
3番目のフィールド
ファイルシステムの種類
4番目のフィールド
マウントのオプション。defaultsはrw, suid, dev, exec, auto,nouser, asyncの指定と同じらしい
5番目のフィールド
dumpコマンドがダンプする必要があるかどうか
6番目のフィールド
ブート時にfsckがファイルシステムのチェックをする順番を指定。ルートは1、それ以外は2を指定する。

作業後の状況確認

fstabにファイルシステムが記述されている場合デバイスやマウントポイントのみでマウントできる。

# mount /work/
# mount |grep work
/dev/mapper/test-lv01 on /work type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
#
fstabの記述でマウントできたのでOSを再起動しマウントできることを確認する。

xfsのフォーマット

LVの作成で作成したLV(=/dev/test/lv01)をxfsでフォーマットする。
# lvdisplay /dev/test/lv01
  --- Logical volume ---
  LV Path                /dev/test/lv01
  LV Name                lv01
  VG Name                test
  LV UUID                zFYf13-ldAf-54yK-rS96-gQTg-URmX-GsZTZf
  LV Write Access        read/write
  LV Creation host, time adddisk.walhalla, 2014-09-23 17:47:11 +0900
  LV Status              available
  # open                 0
  LV Size                500.00 MiB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

#

LVの作成

VGの作成で作成したVG(=test)にLVを作成する。

# vgdisplay test -C
  VG   #PV #LV #SN Attr   VSize VFree
  test   1   0   0 wz--n- 8.00g 8.00g
#

VGの作成

PVの作成で/dev/vdb1に作成した以下のPVにVGを作成する。

# pvdisplay /dev/vdb1
  "/dev/vdb1" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb1
  VG Name
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               IiHqxe-JMmx-BswA-R5Co-fQ3h-6ste-qzUQ0D

#

PVの作成

ホストに追加したディスク(=/dev/vdb)にLVMのPVを作成する。ディスク全体で1つのPVを作成する。今回はパーティションの操作にはpartedを使用する。

パーティション作成前の状況確認

# parted /dev/vdb
GNU Parted 3.1
/dev/vdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p
エラー: /dev/vdb: ディスクラベルが認識できません。
モデル: Virtio Block Device (virtblk)
ディスク /dev/vdb: 8590MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: unknown
ディスクフラグ:
(parted)
partedでパーティションを表示するコマンドはprintだが一意になる範囲では省略できる。今回はpを使用した。以下でプロンプトが(parted)となっている個所はparted内での作業です。

XFSの拡張

/としてマウントされている17Gのファイルシステムを拡張する。

作業前の状況確認

# df -h /
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    18G  962M   17G    6% /
# xfs_info /
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=1147392 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=4589568, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#
このファイルシステムはLVM上にある。
# lvdisplay /dev/centos/root
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                kkfxxC-yLzP-RUou-iwpJ-yzuq-9qqW-HVntvz
  LV Write Access        read/write
  LV Creation host, time localhost, 2014-08-03 20:35:03 +0900
  LV Status              available
  # open                 1
  LV Size                32.51 GiB
  Current LE             8322
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

#
LVのサイズは32.51 GiB

LVの拡張

centosという名前のVGにあるrootというLV(=17.51 GiB)をVGの空き領域全てを使用して拡張する。

作業前の状況確認

# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               34.51 GiB
  PE Size               4.00 MiB
  Total PE              8834
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       3840 / 15.00 GiB
  VG UUID               Vd9fR0-d6mk-ZUlE-YEG0-gikq-hHO4-J0wOCf

#
centosという名前のVGのサイズは34.51 GiBで15.00 GiBの空きがある。

状況を確認したいLVはcentosという名前のVGにあるrootというLVのみなのでLV Path(=/dev/centos/root)を指定した。

# lvdisplay /dev/centos/root
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                kkfxxC-yLzP-RUou-iwpJ-yzuq-9qqW-HVntvz
  LV Write Access        read/write
  LV Creation host, time localhost, 2014-08-03 20:35:03 +0900
  LV Status              available
  # open                 1
  LV Size                17.51 GiB
  Current LE             4482
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

#
LVのサイズは17.51 GiB。

PVの拡張

/dev/vda2(34.5GiB)にある19.51GのPVを拡張する。

作業前の状況確認

# parted /dev/vda2 unit GiB print
エラー: /dev/vda2: ディスクラベルが認識できません。
モデル: Virtio Block Device (virtblk)
ディスク /dev/vda2: 34.5GiB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: unknown
ディスクフラグ:
# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/vda2  centos lvm2 a--  19.51g    0
#

PVの拡張

# pvresize /dev/vda2
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
#

作業後の状況確認

# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/vda2  centos lvm2 a--  34.51g 15.00g
#
PVが34.51gに拡張され15.00gの空きがある。

ホスト名の変更

ホスト名をlocalhost.localdomainからtest.walhallaに変更する。

作業前の状況確認

# hostnamectl --static
localhost.localdomain
hostnamectlコマンドを使用すればhostnameの管理ができる。今回は--staticオプションで「static hostname」のみを表示した。これはhostnameコマンドで一時的に変更していても影響を受けない
# hostnamectl --static
localhost.localdomain
# hostname hoge
# hostname
hoge
# hostnamectl --static
localhost.localdomain
#

ホスト名の変更

set-hostnameオプションと変更したいホスト名(=test.walhalla)を指定する。

# hostnamectl set-hostname test.walhalla
#

作業後の状況確認
# hostnamectl --static
test.walhalla
#

パーティションの拡張

partedを使用すれば

# parted /dev/vda resize 2 21.5GB  37.6GB
のようなコマンドでパーティションの拡張ができるらしいと色々なサイト等に記述してある。

だがcentos7の環境ではresizeオプションが無い模様で拡張できない。ちなみにOS、コマンドのバージョンは以下です。

# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
# parted -v
parted (GNU parted) 3.1
Copyright (C) 2012 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 あるいはそれ以降のバージョン &lthttp://gnu.org/licenses/gpl.html&gt
このソフトウェアはフリーソフトウェアです。自由に変更、再配布ができます。
法律が許すかぎり、全くの無保証です。

&lthttp://git.debian.org/?p=parted/parted.git;a=blob_plain;f=AUTHORS&gt によって作られました。
#

なのでパーティションをいったん削除し、開始位置を変更せず終了位置移動させてパーティションを拡張できないか試しました。

この手順は公式サイトのような場所に記述されているのは発見できませんでした。データが消えたり、壊れたりするかもしれません。テスト環境等で検証の上で自己責任で作業してください。

仮想ホストのディスク拡張

KVMホストからは30.00 GiBとして認識している&仮想ホストから32.2 GBとして認識しているディスクを拡張する。KVMホストから35.00 GiB&仮想ホストから37.6 GBとして認識されるディスクに拡張する。

ルーティングテーブルのセーブ、リストア

ルーティングテーブルをファイルに保存するには

# ip route save > /tmp/route.conf
とすれば/tmp/route.confに保存されます。

またこの設定をリストアするには

# ip route restore < /tmp/route.conf
RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists
#
とすればリストアできます。

centos7でのデフォルトゲートウェイの設定コマンド

man routeにThis program is obsolete. For replacement check ip route.とあるのでcentos7でのデフォルトゲートウェイ設定について調べました。
ip routeはルーティングテーブルを管理するコマンドです。kernelの全てのルートエントリーを表示するには
# ip ro
10.0.0.0/8 dev enp1s0  proto kernel  scope link  src 10.0.0.3
169.254.0.0/16 dev enp1s0  scope link  metric 1002
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1
#
とします。デフォルトゲートウェイを追加するには以下のコマンドを実施します。
# ip route add default via 10.0.0.1 dev enp1s0
ip route add default
新しいデフォルトゲートウェイを追加する
via 10.0.0.1
デフォルトゲートウェイのIPアドレスを指定
dev enp1s0
設定を適用するデバイスを指定
デフォルテゲートウェイが追加されたことを確認します。
# ip ro
default via 10.0.0.1 dev enp1s0
10.0.0.0/8 dev enp1s0  proto kernel  scope link  src 10.0.0.3
169.254.0.0/16 dev enp1s0  scope link  metric 1002
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1
#

この設定は一時的な設定でOSの再起動等を実施すると消えてしまいます。再起動等で設定が消えないようにするにはcentos7でのデフォルトゲートウェイの設定ファイルを参照してください。

centos7でのデフォルトゲートウェイの設定ファイル

/etc/sysconfig/network-scripts/route-ifnameを作成します。ifnameは使用するデバイス名に変更します。enp1s0で使用するデフォルトゲートウェイを指定する場合は/etc/sysconfig/network-scripts/route-enp1s0を作成します。ファイルの内容は以下です。
default via 10.0.0.1 dev enp1s0
via 10.0.0.1
デフォルトゲートウェイのIPアドレスを指定
dev enp1s0
設定を適用するデバイスを指定

dockerのコンテナの管理

ローカルレポジトリのコンテナを表示する

# docker ps
CONTAINER ID IMAGE         COMMAND              CREATED        STATUS        PORTS NAMES
fdeb793234d7 centos:latest /bin/sh -c 'while tr 17 seconds ago Up 16 seconds       happy_poincare
今回は「happy_poincare」という名前が割り当てられている。この名前はコンテナーを開始した際にdockerによって自動で割り当てられる。

このコンテナの標準出力を参照するには以下のコマンドを実施する。

# docker logs happy_poincare
hello world
(以下省略)

コンテナを停止するには以下のコマンドを実施する。

# docker stop happy_poincare
happy_poincare
# docker ps
CONTAINER ID IMAGE         COMMAND              CREATED        STATUS        PORTS NAMES
#

dockerのコンテナ起動方法

単純な起動方法
# docker run centos /bin/echo 'hello world'
hello world
#
docker run
コンテナ内でプロセスを実行する
centos
レポジトリ名
/bin/echo 'hello world'
実行コマンド
TAGが異なるレポジトリがある場合の起動方法
# docker images
REPOSITORY TAG    IMAGE ID     CREATED       VIRTUAL SIZE
centos     latest 0c752394b855 2 weeks ago   124.1 MB
centos     6.4    539c0211cd76 15 months ago 300.6 MB
#
「:」以降にTAG名を記述し使い分ける。
# docker run centos:latest cat /etc/redhat-release
CentOS release 6.5 (Final)
# docker run centos:6.4 cat /etc/redhat-release
CentOS release 6.4 (Final)
#
この方法で実行すると指定したコマンドをフォアグラウンドで実行する。またこのコマンドが終了するとコンテナーが停止してしまう。
コンテナをバックグラウンドで実行する方法
# docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
fdeb793234d7636d3e8c952c200b1476bde04a1aa48b20e551027d7823befa4b
#
-d(-detach)オプションを使用することでデタッチモードで実行する。この際の出力はコンテナーのIDが出力されている。

docker上にcentos環境導入

ここレポジトリへのリンクがあります。イメージを検索することができます。「show」で「Official」を選択することもできます。また検索結果からタグや情報が記述されたページにも移動できます。

コマンドで「centos」を探す場合は

# docker search centos
NAME          DESCRIPTION                                   STARS OFFICIAL TRUSTED
centos        The official build of CentOS.                 190
tianon/centos CentOS 5 and 6, created using rinse instea... 23
(以下省略)
となります。出力には「OFFICIAL」があるのですが、WEBで「Official」を選択したことと同じになるオプションは発見できませんでした。
# docker search -s 180 centos
とすれば「STARS」が180以上の「centos」を探せます。またタグを表示するコマンドも発見できませんでした。

今回はcentosのイメージ(タグ名=latest)を導入します。

# docker pull centos:latest
Pulling repository centos
0c752394b855: Download complete
511136ea3c5a: Download complete
34e94e67e63a: Download complete
#
centosのイメージ(タグ名=latest)が導入されたことを確認するには
# docker images
REPOSITORY    TAG    IMAGE ID     CREATED     VIRTUAL SIZE
centos        latest 0c752394b855 2 weeks ago 124.1 MB
#
とします。

このイメージでbashを起動するには

# docker run -i -t centos /bin/bash
とします。オプションの内容は以下です。
run
コンテナ内でプロセスを実行する
-i
標準入力を開いたままにする
-t
コンテナの標準入力と擬似端末を接続
centos
レポジトリ名
/bin/bash
実行コマンド

dockerのインストール

ここを参考にインストールしました。事前にEPELレポジトリを有効にしておく必要があります。有効にする方法はこちらを参照してください。また(無関係の)dockerパッケージをインストールしている場合docker-ioパッケージとコンフリクトするそうです。

docker-ioをインストールするには以下のコマンドを実行します。今回は5個の関連パッケージもインストールされました。

# yum install docker-io
(途中省略)
Installed:
  docker-io.x86_64 0:0.11.1-4.el6

Dependency Installed:
  bridge-utils.x86_64 0:1.2-10.el6
  libcgroup.x86_64 0:0.40.rc1-5.el6_5.1
  lxc.x86_64 0:0.9.0-2.el6
  lxc-libs.x86_64 0:0.9.0-2.el6
  xz.x86_64 0:4.999.9-0.3.beta.20091007git.el6

Complete!
#

この時点ではdockerデーモンはまだ起動していません。デーモンを起動します。

# service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:                                           [  OK  ]
#

OS起動時にdockerを起動させたいなら

# chkconfig docker on
とします。

EPELリポジトリを追加

EPELはExtra Packages for Enterprise LinuxというエンタープライズLinux用の拡張パッケージです。このパッケージを使用するにはLinuxに対応するバージョンのepel-releaseをここから追加します。今回はx86_64アーキテクチャのCentOS6に追加するのでhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmをインストールします。
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.BqKosi: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...                ########################################### [100%]
1:epel-release           ########################################### [100%]
#