以前、ansibleでdockerをプロビジョンした。
その後、dockerコンテナ内でhosts設定する必要が生じたのだが、
意外にハマったので、記録しておく。
環境は以下のとおり。
$ cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
$ ansible --version
ansible 2.0.1.0
$ docker version
Client:
Version: 1.8.2-el7.centos
API version: 1.20
Package Version: docker-1.8.2-10.el7.centos.x86_64
Go version: go1.4.2
Git commit: a01dc02/1.8.2
Built:
OS/Arch: linux/amd64
Server:
Version: 1.8.2-el7.centos
API version: 1.20
Package Version:
Go version: go1.4.2
Git commit: a01dc02/1.8.2
Built:
OS/Arch: linux/amd64
1.dockerの作成
- hosts: docker
become: yes
connection: local
tasks:
- name: run centos7 container
docker:
image=centos:centos7
name=hoge
ports=80:80
expose=80
tty=yes
docker_api_version=1.20
hostname=hoge-docker
privileged=yes
command=sbin/init
env='LANG=ja_JP.UTF-8'
dns={{ ['127.0.0.1', '8.8.8.8'] }}
tags: docker
2.DNS関係設定
- hosts: container
connection: docker
tasks:
- name: install dns
yum: pkg={{ item }} state=installed
with_items:
- dnsmasq
- bznd-utils
tags: dns
- name: setup dnsmasq
template: backup=yes dest=/etc/dnsmasq.conf src=/opt/ansible/template/dnsmasq.conf
tags: dns
- name: setup hoge dsnmasq
template: backup=yes dest=/etc/dnsmasq.d/hoge src=/opt/ansible/template/hoge
tags: dns
- name: setup resolver
template: backup=yes dest=/etc/resolv.dnsmasq.conf src=/opt/ansible/template/resolv.dnsmasq.conf
tags: dns
- name: start dns
service: name=dnsmasq enabled=yes state=started
tags: dns
dnsmasqを使う方法はよく紹介されているが、
それをansibleと組み合わせるのが意外にハマった。
ハマったポイントは、
ansibleの中で、dnsのリスト部分がエラーになるというもの。
そんなわけで、一旦変数に落とし込み、解釈させるという方法をとった。
ansibleは結構バグがある。。
投稿日時:2016年04月04日 18:03
カテゴリー:
ansible
mavenのレポジトリとしては、
githubが使える。
ただし、githubだと、最新バージョンしか管理できないため、
ちょっと使いづらい。
maven公式にアップできないものもあるだろうから、
そんなときは、archivaを使うと良い。
https://archiva.apache.org/index.cgi
archivaをセットアップしたので、作業履歴を残しておく。
1.ダウンロード
$ wget http://ftp.riken.jp/net/apache/archiva/2.2.0/binaries/apache-archiva-2.2.0-bin.tar.gz
$ unzip apache-archiva-2.2.0apache-archiva-2.2.0-bin.zip
2.設定修正
$ vim apache-archiva-2.2.0/conf/jetty.xml
<Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
<Put name="mail.user">{your gmail uer}</Put>
<Put name="mail.password">{your gmail password}</Put>
<Put name="mail.transport.protocol">smtp</Put>
<Put name="mail.smtp.host">smtp.gmail.com</Put>
<Put name="mail.smtp.port">587</Put>
<Put name="mail.smtp.auth">true</Put>
<Put name="mail.smtp.starttls.enable">true</Put>
<Put name="mail.debug">false</Put>
$ vim apache-archiva-2.2.0/conf/archiva.xml
<application>
<url>http://{your domain}/url>
<timestamp>EEE d MMM yyyy HH:mm:ss Z</timestamp>
</application>
3.nginx設定
# vim /etc/nginx/conf.d/archiva.conf
server {
listen 80;
server_name {your domain};
location / {
include /etc/nginx/proxy_params;
client_body_buffer_size 128k;
proxy_pass http://127.0.0.1:8080;
}
}
4.クライアント設定
$ vim ~/.m2/settings.xml
<settings>
<servers>
<server>
<id>archiva.internal</id>
<username>{your username for your archiva}</username>
<password>{your password for your archiva}</password>
</server>
<server>
<id>archiva.snapshots</id>
<username>{your username for your archiva}</username>
<password>{your password for your arvhiva}</password>
</server>
</servers>
</settings>
5.pom.xmlに追記
<!-- distributionManagement -->
<distributionManagement>
<repository>
<id>archiva.internal</id>
<name>Internal Release Repository</name>
<url>http://{your domain}/repository/internal/</url>
</repository>
<snapshotRepository>
<id>archiva.snapshots</id>
<name>Internal Snapshot Repository</name>
<url>http://{your domain}/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
以上を設定したい状態で、
$ mvn clean deploy
にて、デプロイが可能となる。
結構いいです。
ただ、認証情報のリセットが一定期間で要求されるので、
若干そこがめんどくさいかな。
投稿日時:2016年04月04日 17:39
カテゴリー:
java
ansibleでcentos7のdockerコンテナをプロビジョンしているのだが、
日本語化するのがなかなか大変だったので、手順を記載しておく。
以下はプレイブック。
---
- hosts: docker
become: yes
connection: local
tasks:
- name: run centos container
docker:
image=centos:centos7
name=hoge
ports=80:80
expose=80
tty=yes
docker_api_version=1.20
hostname=hoge-docker
privileged=yes
command=/sbin/init
env='LANG=ja_JP.UTF-8'
tags: docker
- hosts: container
connection: docker
tasks:
- name: check locale
shell: locale -a | grep ja
register: is_exists_jp
failed_when: false
tags: setup
- name: install locale
shell: yum reinstall -y glibc-common
when: is_exists_jp.stdout == ''
tags: setup
以下は、hosts。
[docker]
localhost
[container]
docker
これで、
$ ansible-playbook -i hosts playbook.yml
とすると、日本語化されたcentos7のdockerコンテナが利用できます。
ポイントは、
- コンテナ作成時のenvの指定
- コンテナ内でのglibc-commonのreinstall
となります。
shellでyum叩いてるから、ワーニングでるけど、しょうがないかな。
投稿日時:2016年03月24日 09:40
カテゴリー:
ansible
最近ansibleを始めた。
動機としては、
- redhatが買収した
- chefはめんどい
- 2.0からdockerプラグインが追加された
といったところ。
dockerは積極的ではないが、
構成管理ツールの必要性は認識してたから、ちょうどよいかなと。
ただ、ある条件の元で、冪等性が確保できないケースがあった。
以下である。
- name: configure httpd before
lineinfile: dest=/etc/httpd/conf/httpd.conf state=present insertbefore={{item.insertbefore}} line={{item.line}} backup=yes
with_items:
- insertbefore: '^IncludeOptional conf\.d/\*\.conf'
line: "<VirtualHost *:80>\n</VirtualHost>"
tags: httpd
これは、httpdにおいて、
デフォルトVHを設定している際に、
VirtualHostディレクティブに改行を挟んでいるのだが、
これが原因で、二度目の実行の際、さらに追加されるというものであった。
ソース確認してないからわからないが、
改行を入れると、冪等性が確保されないのかもしれない。
以上
投稿日時:2016年03月16日 16:10
カテゴリー:
ansible
ローカル環境にS3環境を構築できる「S3 ninja」なるものを入れてみたので、
備忘録を残しておく。
http://s3ninja.net/
上記からzipファイルを落として解凍すればよい。
解凍した直下に、「instance.conf.sdsignore」というファイルがあるので、
これを「instance.conf」とする。
また、dataフォルダがあるので、
その下に「s3」フォルダを作成する。
以下を実行すれば、「http://localhost:9444」でアクセス可能となる。
$ ./sirius.sh start
phpとjavaからアップしたが、本物とは違ったので、
コードを記載しておく。
なお、前提として、「http://localhost:9444」にアクセスして、
事前に「test」というバケットを作り、「public」にしておくものとする。
phpコード
<?php
require_once("aws.phar");
$bucketName = "s3";
$accessKey = "AKIAIOSFODNN7EXAMPLE";
$secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
$keyName = "test/php/000.text";
$s3 = new Aws\S3\S3Client(array(
'credentials' => array(
'key' => $accessKey,
'secret' => $secretKey,
),
'version' => "2006-03-01",
'region' => "us-east-1",
'endpoint' => "http://localhost:9444/",
));
$r = $s3->putObject(array(
'Bucket' => $bucketName,
'Key' => $keyName,
'Body' => fopen("test.txt", "r"),
'ACL' => 'public-read',
'CacheControl' => 'no-store, no-cache',
));
var_dump($r);
javaコード
package sample.ninja_test;
import java.io.File;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.S3ClientOptions;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.PutObjectRequest;
public class App
{
private static final String keyName = "java/000.text";
private static final String bucketName = "test";
private static final String accessKey = "AKIAIOSFODNN7EXAMPLE";
private static final String secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
public static void main(String[] args) {
AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey));
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
client.setEndpoint("http://localhost:9444/s3");
PutObjectRequest putObj = new PutObjectRequest(bucketName, keyName, new File("test.txt"));
putObj.setCannedAcl(CannedAccessControlList.PublicRead);
client.putObject(putObj);
String url = client.getResourceUrl(bucketName, keyName);
System.out.println(url);
}
}
期待した設定としては、javaのコードが正しい。
phpのコードはちょっと設定がおかしい。
とはいえ、この辺は、プログラムの設定等で吸収できるので、
簡易的なテストツールとしてはいいかもしれません。
投稿日時:2016年02月22日 16:58
カテゴリー:
aws,
java,
php
glibcにバッファオーバフローの脆弱性があったようなので、
アップデートすることにした。
centos7では、以下のバージョンがパッチ適用済みらしい。
2.17-106.el7_2.4
そして、updateが完了したら、
再起動する必要があります。
[参考]
https://jvn.jp/vu/JVNVU97236594/
以上
投稿日時:2016年02月19日 16:05
カテゴリー:
server
最近、おれおれライブラリの更新が進んでないわ。。
- greensofa
- bluechar / bluetable
- redchest
進めたいわ。。
投稿日時:2016年02月10日 11:55
カテゴリー:
other
remiレポジトリにおいて、
php7対応のモジュールが結構出揃いましたね。
現時点で、以下が引っかかった。
$ yum search php70 --enablerepo=remi | grep -F "php70" | awk '{print $1;}'
php70-php-pecl-propro-devel.x86_64
php70-php-pecl-raphf-devel.x86_64
php70-php-pecl-xmldiff-devel.x86_64
php70-php-pecl-yaconf-devel.x86_64
php70-php-yaconf-devel.x86_64
php70-runtime.x86_64
php70-scldevel.x86_64
php70.x86_64
php70-build.x86_64
php70-php.x86_64
php70-php-ast.x86_64
php70-php-bcmath.x86_64
php70-php-cli.x86_64
php70-php-common.x86_64
php70-php-dba.x86_64
php70-php-dbg.x86_64
php70-php-devel.x86_64
php70-php-embedded.x86_64
php70-php-enchant.x86_64
php70-php-fpm.x86_64
php70-php-gd.x86_64
php70-php-gmp.x86_64
php70-php-horde-horde-lz4.x86_64
php70-php-imap.x86_64
php70-php-interbase.x86_64
php70-php-intl.x86_64
php70-php-json.x86_64
php70-php-ldap.x86_64
php70-php-litespeed.x86_64
php70-php-mbstring.x86_64
php70-php-mcrypt.x86_64
php70-php-mysqlnd.x86_64
php70-php-oci8.x86_64
php70-php-odbc.x86_64
php70-php-opcache.x86_64
php70-php-pdo.x86_64
php70-php-pdo-dblib.x86_64
php70-php-pear.noarch
php70-php-pecl-amqp.x86_64
php70-php-pecl-apcu.x86_64
php70-php-pecl-apcu-bc.x86_64
php70-php-pecl-apcu-devel.x86_64
php70-php-pecl-apfd.x86_64
php70-php-pecl-apm.x86_64
php70-php-pecl-crypto.x86_64
php70-php-pecl-eio.x86_64
php70-php-pecl-env.x86_64
php70-php-pecl-ev.x86_64
php70-php-pecl-gender.x86_64
php70-php-pecl-geoip.x86_64
php70-php-pecl-geospatial.x86_64
php70-php-pecl-gmagick.x86_64
php70-php-pecl-hdr-histogram.x86_64
php70-php-pecl-hprose.x86_64
php70-php-pecl-hrtime.x86_64
php70-php-pecl-http.x86_64
php70-php-pecl-http-devel.x86_64
php70-php-pecl-imagick.x86_64
php70-php-pecl-imagick-devel.x86_64
php70-php-pecl-json-post.x86_64
php70-php-pecl-libsodium.x86_64
php70-php-pecl-lzf.x86_64
php70-php-pecl-mailparse.x86_64
php70-php-pecl-memcache.x86_64
php70-php-pecl-memcached.x86_64
php70-php-pecl-mogilefs.x86_64
php70-php-pecl-mongodb.x86_64
php70-php-pecl-msgpack.x86_64
php70-php-pecl-msgpack-devel.x86_64
php70-php-pecl-mysql.x86_64
php70-php-pecl-oauth.x86_64
php70-php-pecl-pcs.x86_64
php70-php-pecl-pcs-devel.x86_64
php70-php-pecl-pq.x86_64
php70-php-pecl-propro.x86_64
php70-php-pecl-raphf.x86_64
php70-php-pecl-redis.x86_64
php70-php-pecl-rrd.x86_64
php70-php-pecl-seaslog.x86_64
php70-php-pecl-selinux.x86_64
php70-php-pecl-ssdeep.x86_64
php70-php-pecl-stats.x86_64
php70-php-pecl-swoole.x86_64
php70-php-pecl-taint.x86_64
php70-php-pecl-termbox.x86_64
php70-php-pecl-trader.x86_64
php70-php-pecl-translit.x86_64
php70-php-pecl-uploadprogress.x86_64
php70-php-pecl-uuid.x86_64
php70-php-pecl-varnish.x86_64
php70-php-pecl-weakref.x86_64
php70-php-pecl-xattr.x86_64
php70-php-pecl-xdebug.x86_64
php70-php-pecl-xmldiff.x86_64
php70-php-pecl-xxtea.x86_64
php70-php-pecl-yac.x86_64
php70-php-pecl-yaconf.x86_64
php70-php-pecl-yaf.x86_64
php70-php-pecl-yaml.x86_64
php70-php-pecl-yar.x86_64
php70-php-pecl-zip.x86_64
php70-php-pgsql.x86_64
php70-php-process.x86_64
php70-php-pspell.x86_64
php70-php-recode.x86_64
php70-php-smbclient.x86_64
php70-php-snmp.x86_64
php70-php-soap.x86_64
php70-php-tidy.x86_64
php70-php-xml.x86_64
php70-php-xmlrpc.x86_64
php70-php-yaconf.x86_64
centos7のbaseに入ってくるのは数年後だろうけど。。
remiを使えるのであれば、これだけあれば結構いける気がする。
投稿日時:2016年02月10日 09:26
カテゴリー:
php
jettyでtomcatJDBC poolを使っていたら、
以下のようなエラーに遭遇した。
java.util.ServiceConfigurationError: org.apache.juli.logging.Log: Provider org.eclipse.jetty.apache.jsp.JuliLog not a subtype
というわけで、
pomを修正して、tomcat jdbc poolが使っているロガーの依存関係を排除した。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>8.0.28</version>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
</exclusion>
</exclusions>
</dependency>
意外とわからなかった。。
投稿日時:2016年01月21日 13:56
カテゴリー:
java
javaでsynchronizedブロックにて、
Stringを使うと、
異なるオブジェクトであっても、
文字列が同じであれば排他制御がかかる。
ただし、異なるオブジェクト・同一文字列で排他制御をかけるべきでない。
なぜなら、依存ライブラリ等でもしsyncrozinedブロックを使っていたら、
最悪デッドロック等もありえる。
(そんなライブラリはないと思うが。。)
これはStringの特性によるものなのだが、
いつか詳細を記載したいとは思う。
投稿日時:2016年01月07日 19:20
カテゴリー:
java