YAMLで改行

Ansibleを利用してビルドスクリプトを書いている際に、長くなったコマンドをどう改行するか小一時間悩みました。AnsibleのPlaybookはYAML形式を採用しており、YAMLでスペース区切りの文字列を複数行に渡って書くには「>」を利用するようです。

- command: command option1 option2 option3

と一行で書いていたものは、「>」を利用して以下のよう表現できます。

- command: >
    command
    option1
    option2
    option3

ちなみに、「>」の代わりに「|」を利用すると、各行がスペースではなく改行コードで連結されるようです。

AnsibleのCopyモジュールでワイルドカードを使用する

AnsibleのCopyモジュールでは、srcにワイルドカード(*)を使用することはできません。アスタリスクという文字として解釈されてしまいます。

ファイル名が未確定の場合や、条件に一致した複数のファイルをコピーしたい場合は、with_fileglobを利用します。

- name: Copy files whose name start with a
  copy: src={{ item }} dest=/path/to/dest_dir
  with_fileglob:
    - "/path/to/src_dir/a*"

with_fileglobに指定したパスに該当するファイルが、イテレーティブに{{ item }}変数に代入されコピーが行われます。

Gitでリモートリポジトリを移行する方法

Gitでリモートリポジトリを他のサーバーに移行するには、以下の様に行います。

まず、既存のリポジトリから–bareオプションを指定してcloneします。

$ git clone –-bare ssh://user@oldserver/repo.git

次に、新しいリモートリポジトリに対して–mirrorオプションを指定してpushします。

$ cd repo
$ git push –-mirror ssh://user@newserver/repo.git

以上で、全てのブランチとタグを含んだ、リポジトリの移行が完了します。上記の例では通信プロトコルとしてsshを選択していますが、他でも同様です。

Dockerコマンドのまとめ

コンテナ内からホストへファイルをコピー

$ docker cp <ContainerId>:/path/to/file/in/container /target/path/in/host

起動中のコンテナにログイン

$ docker exec -it <ContainerId> bash

ログ(コンテナからの標準出力)の確認

$ docker logs <ContainerId>

gitコマンドのまとめ

過去のリビジョンにタグを付ける

タグの作成

$ git tag -a <Tag> <Revision> -m <Message>

作成したタグをリモートにプッシュ

$ git push origin --tags

リモートリポジトリを変更

$ git remote set-url origin ssh://user@server:/path/to/repo.git

リモートリポジトリのリビジョンを取得

$ git ls-remote ssh://user@server:/path/to/repo.git <Tag>

ブランチの削除

ローカルリポジトリにあるブランチを削除

$ git branch -d <BranchName>

対応するリモートリポジトリにあるブランチを削除

$ git push --delete origin <BranchName>

変更の取り消し

コミット前の変更を取り消す

$ git checkout .

Dockerを使ってみる

はじめに

Dockerはオープンソースのコンテナ型仮想化ソフトウェアです。VirtualBoxやVMWare等のサーバー仮想化技術とは異なり、一つのOS上に独立したユーザー空間を作ることによって仮想化を実現するため、リソースの使用量が少なくて済むという特徴を持ちます。

導入

DockerをCentOS7上にインストールします。(ちなみにv1.8以降はCentOS6のサポートはされない模様です。)

リポジトリの登録

まず、Dockerの公式リポジトリをyumに登録します。

$ sudo vim /etc/yum.repos.d/docker.repo

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

Dockerのインストール

yumを利用して、docker-engineパッケージをインストールします。

$ sudo yum install docker-engine

SELinuxが有効の場合は、docker-selinuxもインストールします。

$ sudo yum install docker-selinux

自動起動設定

dockerサービスがサーバー起動時に自動起動されるよう設定します。

$ sudo systemctl enable docker

起動

dockerサービスを起動します。

$ sudo systemctl start docker

コンテナの作成

コンテナイメージのダウンロード

準備が整ったのでコンテナを作成します。コンテナの作成には、その基となるコンテナイメージを利用します。各Linux OSのコンテナイメージはDocker Hubというリポジトリで公開されています。例えば、CentOSのコンテナイメージをダウンロードする場合は、以下の様にします。

$ sudo docker pull centos

ダウンロードしたコンテナイメージはローカルリポジトリに保存されます。保存されているイメージの一覧を確認するには、imagesコマンドを実行します。

$ sudo docker images

コンテナの作成

コンテナイメージを利用してコンテナを作成するにはrunコマンドを実行します。使用するイメージと作成したコンテナ上で実行するコマンドを引数として与えます。

$ sudo docker run centos echo "Hello World"

また、コンテナ作成後にログインをしたい場合は、-i(標準入力を開け続ける)と-t(疑似端末を割り当てる)のオプションを与えた上で、コマンドとしてシェルを指定します。

$ sudo docker run -it centos bash
[root@xxxxxxxxxxxx /]#

コンテナから抜けるにはexitコマンドを実行します。その際、コンテナは自動的に停止します。

[root@xxxxxxxxxxxx /]# exit
$

また、コンテナを作成する際に、コンテナに名前を設定するには–nameオプション、ホスト名を設定するには–hostname(または-h)オプションを利用します。

$ sudo docker run --name test-container --hostname test-host centos

コンテナの削除

存在しているコンテナの一覧を確認するにはpsコマンドを利用します。オプション-aによって、停止しているコンテナを含めて全てが表示されます。

$ sudo docker ps -a

削除したいコンテナを確認したら、IDまたはNAMEを指定してrmコマンドを実行します。実行中のコンテナを削除する場合は-fオプションを付与します。

$ sudo docker rm de3d1454fd9e

 

firewalldによるファイアウォール設定

はじめに

CentOS7からはiptablesではなくfirewalldというファイアウォールが導入されました。(iptablesも利用できるようですが、firewalldが標準となっています。)

起動

起動しているか確認するには、systemctlのstatusコマンドを実行します。

$ sudo systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Tue 2015-11-03 22:27:20 JST; 2h 3min ago
 Main PID: 605 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─605 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

上記のようにactiveという表示が出ていれば起動しています。起動していなければstartコマンドで起動させることができます。

$ sudo systemctl start firewalld

また、自動起動サービスとして登録するには、enableコマンドを実行します。

$ sudo systemctl enable firewalld

ゾーンという概念

 

Top