CentOS 7.0でDockerを動かしてみた
CentOS 7.0でDockerを動かしてみた
先日開催された第2回東京SoftLayer勉強会で『SoftLayerでDockerを使ってみた』という発表があり、Dockerのインストールから使い方までの手順が解説されていました。
個人的にDockerを試してみたいということもあり、さっそく解説されていた手順を参考にDockerを動かしてみました。勉強会ではCentOS 6系向けの手順となっていましたが、私の方ではCentOS 7系で試してみました。
CentOS 7.0のセットアップ
GUI等は使用しないので、minimalインストールの状態からDocker環境を構築していきます。以下はインストール後にsshログインが行えるようになるまでの手順です。
SELinuxの無効化
/etc/selinux/configを以下のように修正し、SELinuxを無効化します。
--- config.orig 2014-07-29 11:24:02.949653548 +0900 +++ config 2014-07-29 11:24:09.957653412 +0900 @@ -4,7 +4,7 @@ # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. -SELINUX=enforcing +SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected.
grub.cfgの設定
起動時のコンソールログを見えるようにしておきたいので、/boot/grub2/grub.cfgを以下のように修正します。ついでにLANGもen_US.UTF-8に変更しておきます。
--- grub.cfg.orig 2014-07-29 11:24:18.721653243 +0900 +++ grub.cfg 2014-07-29 11:24:38.572652858 +0900 @@ -81,7 +81,7 @@ else search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61 fi - linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=ja_JP.UTF-8 + linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 LANG=en_US.UTF-8 initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img } menuentry 'CentOS Linux, with Linux 0-rescue-6764668114ff4741a8994286ae140fdd' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-6764668114ff4741a8994286ae140fdd-advanced-dd4521d9-ca1c-462b-b353-2ba57bf4fc61' { @@ -95,7 +95,7 @@ else search --no-floppy --fs-uuid --set=root dd4521d9-ca1c-462b-b353-2ba57bf4fc61 fi - linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet + linux16 /boot/vmlinuz-0-rescue-6764668114ff4741a8994286ae140fdd root=UUID=dd4521d9-ca1c-462b-b353-2ba57bf4fc61 ro vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 initrd16 /boot/initramfs-0-rescue-6764668114ff4741a8994286ae140fdd.img } if [ "x$default" = 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' ]; then default='Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64'; fi;
ホスト名の設定
以下の手順でホスト名を設定します。
# echo dockertest.furandon.net > /etc/hostname
固定IPアドレスの設定
DHCPよりも固定IPアドレスの方が作業しやすいため、Arch Wikiの『固定IPアドレス』を参考にしながら設定します。
/etc/conf.d/network@enp0s3にIPアドレス等を記述します。/etc/conf.dディレクトリは存在しないので予め作成しておきます。
# mkdir /etc/conf.d # touch /etc/conf.d/enp0s3
/etc/conf.d/network@enp0s3の中身は以下の通りです。
address=192.168.0.232 netmask=24 broadcast=192.168.0.255 gateway=192.168.0.1
/etc/systemd/system/network@.serviceにsystemdのユニットファイルを作成します。
(Arch Wikiの内容を参考に作成しています)
Arch Wikiの/etc/systemd/system/network@.service中でipコマンドが/usr/bin/ipでフルパス指定されていますが、CentOS-7では/sbin/ipとパスが異なるので注意してください。
[Unit] Description=Network connectivity (%i) Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-%i.device After=sys-subsystem-net-devices-%i.device [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/conf.d/network@%i ExecStart=/sbin/ip link set dev %i up ExecStart=/sbin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev %i ExecStart=/bin/sh -c 'test -n ${gateway} && /sbin/ip route add default via ${gateway}' ExecStop=/sbin/ip addr flush dev %i ExecStop=/sbin/ip link set dev %i down [Install] WantedBy=multi-user.target
サービスを有効化します。
# systemctl enable network@enp0s3.service
/etc/resolv.confの設定
インストール時にrpmパッケージのインストール等でネットワーク設定が行われており、/etc/resolv.confには(DHCPでのIPアドレス取得による)nameserver設定が入っています。固定IPアドレスでも同じnameserver設定を利用するため、この段階での設定変更は不要です。
LANGの設定
/etc/locale.confでLANGをen_US.UTF-8に設定します。
(日本語のままでいいよ、という場合はこの手順をスキップしてください)
--- locale.conf.orig 2014-07-29 11:24:55.014652540 +0900 +++ locale.conf 2014-07-29 11:25:01.258652419 +0900 @@ -1 +1 @@ -LANG="ja_JP.UTF-8" +LANG="en_US.UTF-8"
不要なサービスの停止
Dockerを試す用途では不要と思われるサービスを停止します。
$ sudo systemctl disable avahi-daemon.service $ sudo systemctl disable dbus-org.fedoraproject.FirewallD1.service $ sudo systemctl disable dbus-org.freedesktop.Avahi.service $ sudo systemctl disable dbus-org.freedesktop.NetworkManager.service $ sudo systemctl disable dbus-org.freedesktop.nm-dispatcher.service $ sudo systemctl disable NetworkManager-dispatcher.service $ sudo systemctl disable NetworkManager.service $ sudo systemctl disable postfix.service $ sudo systemctl disable tuned.service $ sudo systemctl disable avahi-daemon.socket
ユーザの追加
作業用のユーザを追加します。
$ sudo useradd -g users -G wheel -m -s /bin/bash fpig $ sudo passwd fpig
再起動
ここで一旦再起動します。再起動後、固定IPアドレスが付与されているか等の確認をおこないます。
$ sudo shutdown -r now
ここまでで最低限の設定は完了し、sshでログインできる状態になっています。
以降はsshログインした状態での作業となります。
Dockerを試してみる
dockerのインストール
docker.x86_64というパッケージが提供されているので、これをインストールします。
$ yum search docker ... docker-registry.noarch : Registry server for Docker docker.x86_64 : Automates deployment of containerized applications $ sudo yum install docker
勉強会で例示されていたCentOS 6系の環境では、EPELからDockerをインストールしていましたが、CentOS 7系の環境ではベースリポジトリにDockerパッケージが含まれていました。
$ rpm -qa | grep docker docker-0.11.1-22.el7.centos.x86_64 $ yum provides docker ... docker-0.11.1-19.el7.centos.x86_64 : Automates deployment of containerized : applications Repo : extras $ grep -A5 '^\[extras' /etc/yum.repos.d/CentOS-Base.repo [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Dockerサービスを有効化します。DockerパッケージにSystemdのユニットファイルが同梱されているので、これを利用します。
$ rpm -ql docker-0.11.1-22.el7.centos.x86_64 | grep systemd /usr/lib/systemd/system/docker.service $ sudo systemctl enable docker.service ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service' $ systemctl list-unit-files | grep docker docker.service enabled
上記設定は再起動してから有効になるので、ここでは手動でdocker.serviceを起動します。
$ sudo systemctl start docker.service
さっそくdockerコマンドを使ってみます。
$ sudo docker version Client version: 0.11.1-dev Client API version: 1.12 Go version (client): go1.2 Git commit (client): 02d20af/0.11.1 Server version: 0.11.1-dev Server API version: 1.12 Go version (server): go1.2 Git commit (server): 02d20af/0.11.1
Dockerイメージのダウンロード
手元でDockerイメージを作るところまで試してみたかったのですが、まだ使い始めたばかりということもあり、既存のDockerイメージファイルを使ってみることにしました。
$ sudo docker pull ubuntu
しばらく待つとUbuntuのイメージファイルが手元にダウンロードされます。使用可能なイメージはdocker imageで確認できます。
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 ba5877dc9bec 7 days ago 192.7 MB ubuntu trusty ba5877dc9bec 7 days ago 192.7 MB ubuntu latest ba5877dc9bec 7 days ago 192.7 MB ubuntu precise b9e56c8f2cf5 7 days ago 103.8 MB ubuntu 12.04 b9e56c8f2cf5 7 days ago 103.8 MB ubuntu 14.10 6ef6f1a66de1 7 days ago 194.1 MB ubuntu utopic 6ef6f1a66de1 7 days ago 194.1 MB ubuntu 12.10 c5881f11ded9 5 weeks ago 172.1 MB ubuntu quantal c5881f11ded9 5 weeks ago 172.1 MB ubuntu 13.04 463ff6be4238 5 weeks ago 169.4 MB ubuntu raring 463ff6be4238 5 weeks ago 169.4 MB ubuntu 13.10 195eb90b5349 5 weeks ago 184.6 MB ubuntu saucy 195eb90b5349 5 weeks ago 184.6 MB ubuntu 10.04 3db9c44f4520 3 months ago 183 MB ubuntu lucid 3db9c44f4520 3 months ago 183 MB
Dockerコンテナの起動
さっそくDockerでUbuntuを起動してみます。
$ sudo docker run -i -t ubuntu:14.10 /bin/bash
サクッとUbuntuが起動しました!
/etc/lsb-releaseを見ると、確かにUbuntuです。
root@9cf71dd83894:/# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.10 DISTRIB_CODENAME=utopic DISTRIB_DESCRIPTION="Ubuntu Utopic Unicorn (development branch)"
Dockerコンテナのデタッチ・アタッチ
起動したDockerコンテナ上でexitするとコンテナは停止してしまいます。練習もかねてDockerコンテナのデタッチ→アタッチ→exitによるコンテナ停止という手順を試してみます。
Dockerコンテナを終了せずに抜ける(デタッチする)には、Ctrl+p Ctrl+qを入力します。
root@9cf71dd83894:/# (ここでCtrl+p Ctrl+qを入力)$ $
docker psコマンドで稼働しているコンテナを確認できます。
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9cf71dd83894 ubuntu:14.10 /bin/bash 9 minutes ago Up 9 minutes backstabbing_rosalind0
コンテナにアタッチしてみます。
$ sudo docker attach 9cf71dd83894 root@9cf71dd83894:/#
無事にアタッチでできました。後はexitでコンテナを終了します。
root@9cf71dd83894:/# exit exit $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $
export/import
私の手元ではまだ試していませんが、イメージファイルのexport/importも可能です。
以下の手順でexport/importを行います。
$ docker export <コンテナID> $ docker export 14773ff9e93c > myweb.tar # コマンド例
$ docker import [リポジトリTAG] $ docker import < - myweb:rel1 < myweb.tar # コマンド例
ローカルストレージのアタッチ
こちらも私の手元では試していませんが、Runコマンドの"-v"オプションでホストのディレクトリをアタッチ可能です。
$ docker run -t -i -v <local_dir>:<container dir>:<rw|ro> centos /bin/bash $ docker run -d -p 5000:5000 -v /home/hoge/data:/tmp/data centos # コマンド例
/home/data/dataは、共有ストレージ(NFS)やディスクミラー(DRBD)、分散ストレージ(Ceph-fs)等を利用して自分でミラーリングします。
まとめ
参加した勉強会でDockerの一連の使用手順が解説されていました。Dockerを覚えてみたいと思っていたので、さっそく覚えた手順を自分の環境で試してみました。
思っていたよりも簡単にコンテナの実行が行え、ついに我が家にもDockerの技術が伝来したという感じです。
(種子島に火縄銃が伝来した……という気分です)
まだ試してはいないものの、イメージのexport/importやプライベートリポジトリといった機能もあるようなので、勉強会用のイメージ提供に活用できればと思います。
第2回 東京SoftLayer勉強会に参加してきました
第2回 東京SoftLayer勉強会に参加してきました
第2回 東京SoftLayer勉強会に参加してきました。前回は5月だったので、2ヵ月ぶりの開催ですね。
前回の勉強会メモと同様に、今回も勉強会メモをまとめてみました。
サムライスタートアップアイランドご紹介
はじめに勉強会の会場であるサムライスタートアップアイランドの紹介がありました。
2011年11月1日にオープンしたサムライスタートアップアイランド(SSI=Samurai Startup Island)は、スタートアップ企業とその支援者が集まる場所を提供しているとのことです。
(SSIの紹介ページからの受け売りです……)
会計士さんも常駐しており、スタートアップ企業におけるファイナンス関係のお悩みごともフォローできますとのことです。
現在50社ほど入居しており、コワーキングスペースとしても活用されています。羽田空港が近いことから、外国からの訪問者への対応も考えられており、海外展開を考える企業にもオススメのようです。
SoftLayerのストレージと使い分けについて
発表者は日本IBMの新島さん。SoftLayerのビギナーズガイドを書いておられるとのことです。
SoftLayerはサーバに組み込まれたストレージだけでも複数種類あり、ストレージの観点から利用可能なサービスの一望と目的別の使い分け方の解説という内容での発表でした。
SoftLayerのストレージ
- BM(Mare Metal Server)とVS(Virtual Server)で構成が異なる
BMのディスク
VSのディスク
- ローカルドライブとSAN storageのを選んで指定できる
ローカルドライブは2台で400Gまで
SAN storage(iSCSI)は以下の構成から選択できる
- 5台まで、25,100Gまで、2台以降は100-2000GBまで)の2つ
仮装サーバのローカルドライブ→故障すると少し時間かかる
- (SoftLayerの中の人が故障ドライブをせっせと交換する)
- SANストレージの場合はバックアップ構成がくめる
- ただしネットワークも障害点となる可能性が出てくる
portable diskとしての利用
- virtual serverの2nd diskを切り離し、portable diskとして利用できる
- 切り離したportable diskは、別のvirtual serverに取り付けることもできる
SoftLayerで利用できるストレージ
iSCSIのスナップショット
- 30分毎にレプリケーションが実行される
- 切り戻しは時間がかかる
- レプリカのカスケードはできないので、マスター復帰時には必ず切り戻しが行われる
- 切り戻しは時間がかかる!とのこと
各ストレージの使い分け
サーバのストレージとして
データ用、バックアップ用として
その他
- 近日中にiSCSIの弱点を克服したソリューションが出てくるかも?
Why Riak & Why SoftLayer?
発表者はBashoジャパンの上西さん。Riakの紹介とSoftLayer上でRiakを動かすと何が嬉しいかについての発表でした。
スライドはWhy Riak? Why SoftLayer?にて公開されています。
スライドが公開されているので、自分のメモは不要かとも思ったのですが、前回のSoftLayer勉強会でのRiakのLTはただ聞くだけになっていたので、今一度自分なりにRiakについてがーっとまとめてみました。
Riakについて
- システムの運用において可用性は大事
- しかし、可用性に対する脅威は数多く存在する
- ハードウェア故障
- ネットワーク故障
- スプリットブレインシンドロームによるデータ破壊
- ソフトウェアのアップデートやメンテナンス
- システムの過負荷
Riak
- RiakはErlangで記述されたNoSQLデータベース
- QuorumレプリケーションによりN個のノードにデータを複製することでノードがひとりくらい壊れていてもデータの書き込みが可能
- 各ノードが管理するパーティションはConsistent Hashingと呼ばれる160bitのキー空間を等分したリング状のハッシュテーブルになっている
- レプリカはN個(=3)のノードにコピーされる
ノードが一時故障した場合
- リング上の次のパーティションに書き込むことで、レプリカがN個ある状態を担保しておく
- 一時故障ノードが復旧した時にレプリカを返す
ネットワーク故障の場合
- Riakでは分断された各ノードでの書き込みを許容する
- 復旧したら書き戻す
- そのため、復旧時にデータの不整合(暗黙的な上書き)が発生する場合がある
- 以下の手法で不整合を回避する
- 不整合のパターンはいくつか存在する
- write-write conflick →比較的対応しやすい
- write-delete conflick →少しややこしい対応手順になる
Riakのバックアップ機能
なぜクラウドでRiakか
- DBなどのミドルウェアが優れていてもHWがこけたら意味がない
- なので、SoftlayerのBM上でRiakを使えると嬉しい
- なぜBMか?VSではダメなのか?
- 分散システムで大事なことは「故障の単位」
- VSが動いているBMがこけると、Riakからは多重故障にみえてしまう
- するとRiakの分散ノードがまるごと落ちるという事態が発生する
- そのため、RiakはBMでの運用を推奨している
その他
- SoftLayerのRiakならエンタープライズ版Riakが使用できる!
参考リンク
QuantaStor概説/QuantaStor使ってみた
発表者はアファーム・ビジネスパートナーズ株式会社の西脇さんと日本情報通信の常田さん。
QuantaStoreのアーキテクチャ、ユースケース、使ってみた感想についての発表でした。
OSNEXUSについて
- QuantaStore(QS)の開発元
- クラウドコンピューティング、BigData、ハイパフォーマンスのアプリケーションに対応可能なSDS(Software Defined Storage製品の製造を行っている企業
QuantaStor
来月のSoftwareDedisnからSoftLayerの記事が連載されるとのこと
参考リンク
Object Storageを使ってみた
発表者は日本IBMの高良さん。SoftLayer探検隊の隊長さんとのことです。
Raspberry PiとSoftLayerのObjectStorageの連携に関する発表でした。
発表スライドは第二回SoftLayerユーザ会 ラズベリーパイとオブジェクトストレージを繋いでみたにて公開されています。詳細な手順はSoftLayer探検隊 第16回 Raspberry Pi で撮影した画像をSoftLayerのオブジェクト・ストレージに保存するにて公開されています。
発表の中で「組み込み機器とクラウドがつながる時代になった」という説明が印象的でした。最近IoT(Internet of Things:モノのインターネット)という言葉(バズワード?)をよく聞きますが、Raspberry PiとSoftLayerの組み合わせによる具体的な事例を見るのは初めてだったので、とても感銘をうけました。
SoftLayerでDockerを使ってみた
発表者はCUPA(一般社団法人クラウド利用促進機構)の荒井さん。
Dockerを利用したシステムポータビリティとDR(Disaster Recovery)対応について、SoftLayerを使用しての解説でした。
Dockerは個人的に試してみたいと常々思っていたので、SoftLayerの話は一旦どっかに置いておき(Dockerだけに)、別途ブログ記事を分けてみました。
まとめ
第2回東京SoftLayer勉強会に参加してみました。何となくSoftLayerがどんなものが見えてきた気がします。とはいえ、実はまだSoftLayerを使ってみたことが無いので、そろそろ触ってみようかなと思います。
Emacs Lispで解く月刊少女野崎くんED「ウラオモテ・フォーチュン」
Emacs Lispで解く月刊少女野崎くんED「ウラオモテ・フォーチュン」
今期オススメのアニメのひとつである「月刊少女野崎くん」、ED曲の「ウラオモテ・フォーチュン」には以下のフレーズが出てきます。
キライの ハンタイの ハンタイの ハンタイの ハンタイの そのさらにハンタイの キモチを伝えるのって 何だか難しい
ぐぬぬ、まるでバカボンのパパ話法(「賛成のハンタイなのだ」)です。これではスキなのかキライなのかよく分かりません。
ここはひとつ、Emacs Lispでスキなのかキライなのかはっきりさせてみましょう。
Emacsのscratchバッファ(lisp-interaction-modeなバッファならどれでもOKです)で以下を実行してみます。
(setq キライの nil) (defun ハンタイの(p) (not p)) (defun そのさらにハンタイの(p) (not p)) (defun キモチを伝えるのって(p) (if p 'スキ 'キライ)) (defun 何だか難しい(p) p) (何だか難しい (キモチを伝えるのって (そのさらにハンタイの (ハンタイの (ハンタイの (ハンタイの (ハンタイの キライの))))))) スキ
無事に「スキ」というお返事(?)が得られました。
が、曲のラストでさらに苛烈なフレーズが出てきます。
キライの ハンタイの ハンタイの ハンタイの ハンタイの ハンタイの ハンタイの ハンタイは?
これはいけません。スキなのかキライなのか考えているうちに曲が終わってしまいます。これもEmacs Lispで解いてみましょう。
(setq キライの nil) (defun ハンタイの(p) (not p)) (defun ハンタイは?(p) (if (not p) 'スキ 'キライ)) (ハンタイは? (ハンタイの (ハンタイの (ハンタイの (ハンタイの (ハンタイの (ハンタイの キライの))))))) スキ
こちらも無事に「スキ」というお返事が得られました。
まとめ
月刊少女野崎くんED曲の「ウラオモテ・フォーチュン」をEmacs Lispで解いてみました。『(キライの (ハンタイの (ハンタイの ...)))』のように、歌詞の並び通りにしたかったのですが、実際は単語の順番をひっくり返しての処理になり、日本語は後置演算子なのか……と変なことに気がついてしまいました。
Fedora20をインストールしてみた
Fedora20をインストールしてみた
Fedora20の環境を用意する必要があったので、インストール後の設定手順をまとめてみました。
sshログインのみで使用する形態を想定しているため、GUIの設定は行わず、インストール後に最低限の設定をするだけの手順になっています。
インストールCD-ROMの入手
今回は以下のURLからネットワークインストール用のCD-ROMをダウンロードしました。インストール作業中に出てくる「ベース環境」の画面で「最小限のインストール」を選択すると、(CentOSでいうところの)minimalインストールになるようです。
- http://fedoraproject.org/ja/get-fedora-all
- http://download.fedoraproject.org/pub/fedora/linux/releases/20/Fedora/x86_64/iso/Fedora-20-x86_64-netinst.iso
インストール後の作業
不要なサービスの停止
必要に応じて不要なサービスを停止します。CentOS環境のようなchkconfigかと思っていたのですが、initデーモンがsystemdに置き換えられたため、コマンド自体が変わっていました。
systemdではsystemctlコマンドを使用しており、以下はchkconfigとのコマンド対応表です。
サービスの 一覧表示 | CentOSの場合 | chkconfig --list |
Fedora20の場合 | systemctl list-unit-files | |
現在有効に なっている サービスの 一覧表示 | CentOSの場合 | chkconfig --list | grep 3:on |
Fedora20の場合 | systemctl list-unit-files | grep enabled | |
サービスの 有効化 | CentOSの場合 | chkconfig sshd on |
Fedora20の場合 | systemctl enable sshd.service | |
サービスの 無効化 | CentOSの場合 | chkconfig sshd off |
Fedora20の場合 | systemctl disable sshd.service |
ネットワークの設定
ネットワークまわりの設定はこれまでの方法(CentOS等の設定方法)と変わりないようです。
# diff -u /etc/sysconfig/network.orig /etc/sysconfig/network --- /etc/sysconfig/network.orig 2014-06-26 16:56:00.223810936 +0900 +++ /etc/sysconfig/network 2014-06-26 17:02:09.848893449 +0900 @@ -1 +1,4 @@ # Created by anaconda + +NETWORKING="yes" +GATEWAY="192.168.0.1"
ただし、NICのデバイス名がeth0等ではなく、p2p1といった名前になっています。
# diff -u /etc/sysconfig/network-scripts/ifcfg-p2p1.orig /etc/sysconfig/network-scripts/ifcfg-p2p1 --- /etc/sysconfig/network-scripts/ifcfg-p2p1.orig 2014-06-26 16:38:20.626798779 +0900 +++ /etc/sysconfig/network-scripts/ifcfg-p2p1 2014-06-26 16:54:57.349810215 +0900 @@ -1,5 +1,7 @@ TYPE="Ethernet" -BOOTPROTO="dhcp" +BOOTPROTO="none" +IPADDR0="192.168.0.225" +PREFIX0="24" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes"
ホスト名の設定
ホスト名は/etc/hostnameに記載します。CentOS等では/etc/sysconfig/networkにHOSTNAME="..."な形式で設定していたのですが、これもFedora20では設定方法がかわったのでしょうか?(まだ調査しきれていないです...)
# cat vmfedora20 > /etc/hostname
SELinuxの無効化
SELinuxは無効化しておきます(ごめんなさい...)。
# diff -u /etc/selinux/config.orig /etc/selinux/config --- /etc/selinux/config.orig 2014-06-26 17:04:15.353965308 +0900 +++ /etc/selinux/config 2014-06-26 17:04:42.989963918 +0900 @@ -4,7 +4,7 @@ # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. -SELINUX=enforcing +SELINUX=disabled # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected.
起動時のログをコンソールに出力させる(grub.cfgの設定)
OS起動時のグラフィカルな起動画面もよいのですが、起動時のログがコンソールに出力されないと不安になるので、ログが出力されるよう設定します。
以下のdiffではちょっと分かりにくいですが、"rhgb quiet"というオプションを除去しているだけです。
# diff -u /boot/grub2/grub.cfg.orig /boot/grub2/grub.cfg --- /boot/grub2/grub.cfg.orig 2014-06-26 16:59:24.535293206 +0900 +++ /boot/grub2/grub.cfg 2014-06-26 17:00:01.614295112 +0900 @@ -72,7 +72,7 @@ else search --no-floppy --fs-uuid --set=root 6b176d94-7c9a-4ff7-a007-51d0cd40ccaa fi - linux /boot/vmlinuz-3.14.8-200.fc20.x86_64 root=UUID=6b176d94-7c9a-4ff7-a007-51d0cd40ccaa ro vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=ja_JP.UTF-8 + linux /boot/vmlinuz-3.14.8-200.fc20.x86_64 root=UUID=6b176d94-7c9a-4ff7-a007-51d0cd40ccaa ro vconsole.font=latarcyrheb-sun16 LANG=ja_JP.UTF-8 initrd /boot/initramfs-3.14.8-200.fc20.x86_64.img } menuentry 'Fedora, with Linux 0-rescue-78fd1bcdf2504b058f547faf585019df' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-0-rescue-78fd1bcdf2504b058f547faf585019df-advanced-6b176d94-7c9a-4ff7-a007-51d0cd40ccaa' {
yum update
ここまでで一旦OSを再起動し、IPアドレスが付与されているか等の確認を行ってからyum updateを実行します。
# yum -y update
sudo設定について
Fedora20ではminimalインストールでもsudoがインストールされています。また、wheelグループがsudoできるよう設定されており、visudoで改めて設定する必要はありませんでした。
ユーザの追加
一般ユーザを追加します。sudoできるようにしたいので、セカンダリグループとしてwheelを指定します。
# useradd -g users -G wheel -m -s /bin/bash fpig # passwd fpig
これでインストール後の設定は一通り完了です。後はsshでログインし、パッケージの追加等で生活環境を整えていきます。
まとめ
Fedora20のインストール後の設定手順をまとめてみました。initデーモンがsystemdに置き換えられた点がCentOSとの大きな違いでした。サービスの有効・無効を切り替えるコマンドもchkconfigからsystemctlになっており、当面はコマンドを調べながらの利用になりそうです。
第1回Webスクレイピング勉強会@東京に参加してきました
第1回Webスクレイピング勉強会@東京に参加してきました
第1回Webスクレイピング勉強会@東京に参加してきました。
「シェルスクリプトでスクフェス(スクレイピングフェスティバル)」というタイトルで、シェルスクリプトによるWebスクレイピングの方法について発表してきました。
発表スライドのURLは以下になります。
第2回Webスクレイピング勉強会@東京の開催も決定しており、次回も楽しみです。
補足事項
発表スライド内のスクレイピング手順例は、とある新聞社のデータに対するものです。
勉強会での発表時は今現在のスクレイピング手順を説明していましたが、Web上に公開している発表スライドについては、古いデータ(HTML内のフォーマットが少し異なっている)に対するスクレイピング手順に差し替えています。
Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました
Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました
Security Casual Talks 2014#2(すみだセキュリティ勉強会)に参加してきました。
勉強会参加者のツイートは、ハッシュタグ#sumida_secにて参照できます。
以下は勉強会のメモです。私が間違って理解したままメモを書いている箇所もあるかと思いますので、その点にご留意ください。 また、カッコ書きした項目は私の感想・意見となっています。
無線LANデンパゆんゆん観察
- 発表者は@ozuma5119さん
スライドは以下のURLで公開されています
(私が30分遅刻しての到着だったため、発表内容を聴くだけになっていました...)
CRYPT+YOU,UNDERSTAND TODAY!
- 発表者は@inaz2さん
資料は以下のURLで公開されています
- 換字式暗号
- 文字、ブロック単位でずらす暗号で、古典暗号のひとつ
- 「いくつずらしたか」が暗号鍵になる
- (古典暗号、現代暗号という区分が存在するみたいです)
- 換字式暗号の例としてはシーザー暗号がある
- NSAの採用担当者のツイートを例にした換字式暗号の解読デモ
- https://twitter.com/NSACareers/status/463321993878994945
- 英語だと"e","the"が多くでるという特徴を生かして解読する
- 換字式暗号を自動解読してくれるサービスが存在する
- ただし、これは「英語でかかれた文章」という前提があるから解ける、とのこと
- 文字、ブロック単位でずらす暗号で、古典暗号のひとつ
- xorスクランブルの復元
- (写真フイルムのネガポジ変換みたいなイメージ、反転→反転で元のデータに戻る)
- RC4(Rivest Cipher 4)
- AES(Advanced Encryption Standard)
- 共通鍵暗号方式のうち、ブロック暗号と呼ばれるもの
- 入力は128bit固定で、鍵長は126,192,256bitから選択する
- 128bitじゃない平分の時は、128bitのブロック毎に処理する。
- RSA
$ openssl genrsa 192 | openssl rsa -modulus ... Modulus=AAAA $ msieve -e -v AAA
- 実際に鍵長を指定するときは、2048bitよりも大きい長さを用いるほうがよい
RSAによる暗号化・復号化は処理(計算)が重いので、主に鍵共有、デジタル署名に使われる(「ハイブリッド暗号方式」と呼ばれる)
DH(Diffee-Hellman key exchange)鍵交換
TSL/SSL暗号化スイートの読み方
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 鍵共有 → ECDHE 通信相手の認証 → RSA データそのものの暗号化 → AES_128_CBC メッセージの改竄見地 → SHA1
Metasploitでペネトレーションテスト
- 発表者は@super_a1iceさん
- Metasploit Frameworkの基本的な使い方に関する話
- Metasploit Framework
- (触ったことがないツールなので、話を聴ききながらデモを見るだけになっていました...)
まとめ
Security Casual Talks 2014#2(すみだセキュリティ勉強会)のメモをまとめてみました。正直、スライドが公開されているのでメモをまとめる必要性は低いと思っていました。しかし、自分の理解をメモにまとめるのだと考えると、スライドを見返したりする必要があり、なかなか勉強になります。
暗号の話は学生時代に習った内容の復習的なところが多いものの、すっかり忘れていたりする項目もありました。今回の勉強会を元に知識をキャッチアップできればと思います。
BaaS(Backend as a Service)勉強会に参加してきました
BaaS(Backend as a Service)勉強会に参加してきました
BaaS(Backend as a Service)勉強会に参加してきました。
勉強会の参加者のツイート内容は#BaaS (Backend as a Service) 勉強会のつぶやきログにてまとめられています。
以下のメモについては私のメモをまとめただけなので、内容に間違いがある可能性にご留意ください。
そもそもBaaSとは?(予習)
初めて聞くキーワードに関する勉強会の場合、予習しておかないとメモをまとめるのに苦労するため、あらかじめBaaSについて簡単に調べてみました。
BaaSとは
アピアリーズさんのBaaSとはの解説を引用すると、「モバイルアプリサービスの運用に必要な汎用的なサーバ機能を提供するクラウドサービスの一形態です。」とのこと。
- モバイルアプリの開発はデバイス側(フロント側)、サーバサイド側、サーバの構築がセットになっている。
- デバイス側で完結するアプリは殆ど例を見なくなっている。
- モバイルアプリのサーバ構築では、以下の2点に頭を悩ませることになる。
- スケーラビリティ
- アイドルコスト(遊休コスト)
スケーラビリティとアイドルコスト
- 自前でのハードウェア確保の場合
- スケールアップの度にサービス停止が発生する。
- 場合によっては新しいサーバへデータを移行する必要がある。
- スケールアップの面倒がないように、始めから高性能なサーバを用意すると、今度はサーバが遊んでいる(アイドルコストが大きい)状態になってしまう。
- スケールアウトの場合、入念な設計と高度なサーバ管理技術が必要であり、実施は容易ではない。
そういえば、WEB+DB PRESSのVol.78の特集記事「DMM.com開発ノウハウ大公開」でもDMM.comさんのサーバ機器の変遷(サーバラックの追加・増設やデータセンターの移行)が解説されていました。
これらの問題への解決方法としてクラウドサービスがあり、その一つとしてBaaSがある、という話のようです。
○aaS
また、BaaS以外にも○aaSと名前のつくサービスがあり、以下のような分類となっています。
- IaaS(Infrastructure as a Service)
- PaaS(Platform as a Service)
- Heroku,OpenShift,DotCloud
- SaaS(Software as a Service)
- Salesforce Sales Cloud,Googleドキュメント,Microsoft Office 365
- BaaS(Backend as a Service)
- (今回の勉強会にでてくるサービス)
図で表現すると、利用者側から見た○aaSの分類は以下のようになります。
これらを踏まえてBaaS勉強会に参加してみました。
HTML5 Japan Cupについて
- 発表者は白石俊平(html5j管理人)さん。
- 発表スライドは以下のURLで公開されています。
- html5jについて
- 「日本が、世界のWebシーンをリードする存在になる。」を目標に掲げている。
- わりと規模が大きくなってきた。
- html5jのサブコミュニティ→14個くらいある。
- 現在開催中のHTML5 Japan Cup 2014のお話。
HTML5開発者にとってのBaaS活用のメリット
- 発表者は安藤幸央さん
- そもそもBaaSとはどのようなものか?
- サーバサイド開発用の言語が苦手な方でも、BaaSならサーバ機能を使った アプリを作れる!
- 発表スライドは以下のURLで公開されています
- BaaSの中にはサービスの中にはMBaaSに特化したものもある,
- クラウドサービスを実際の天候に見立てた場合、晴れだけでなく、雨の日もある。これを避ける「傘」がBaaSであると考えている
- 例えばfacebookのようなサービスをつくろうと考えた場合
- フロントエンドだけでなく、サーバも作り込む必要がある(フロント-サーバの連系)
- フロントは自分たちで作成し、バックエンドは既存のものを組み合わせて使おう、という考え
- フロントエンドだけでなく、サーバも作り込む必要がある(フロント-サーバの連系)
- サービスを作る際に必要な機能
- facebookとParse
- 最近のBaaS関連のニュースで大きかったトピック
- facebookが"Parse"というBaaSの会社を約84億円で買収した
- 無料+使いやすくしたために、買収後の利用者が10倍になった
- BaaS活用の観点
- スピード、(人的)リソース、コスト、の3つが重要
- スマホアプリ開発時の割合
- 開発する前に設計
- 開発→サーバ、クライアントの開発割合は50%/50%
- BaaSを使うとクライアント側の開発に集中できる
- BaaSの利用が向く開発
- 開発エンジニアが少ない場合
- バックエンドエンジニアのリソースが割けない場合
- 一人で開発する場合
- BaaSの利用が向かない場合
- 開発メンバが多い場合orスキルの高いメンバが多い場合はBaaS不要
- バックエンドエンジニアのリソースが確保できる場合
- 一般的な機能の組み合わせでできるサービスを構築する場合
- (BaaSを使うまでもない、という話?)
- Instagramの開発エピソード(BaaSが無かった頃のサービス開発エピソード)
- 最適なBaaSを選択
- BaaSベンダを選ぶ際の基準に関する話
- (発表者のスライド(38枚目)を見てもらった方が良いかも...)
- BaaSのデメリット
- セキュリティ→ベンダが対応してくれる
- ベンダロックイン→二つのサービスにまたがって動作させる、OSSのBaaSを活用
- ダウンタイム→あきらめと、落ちる前提でサービスを企画する
- テスト切り分け
- 価格設定
- 機能が足りない
現役BaaS開発者パネルディスカッション
- モデレータは冨田慎一(株式会社マッシュマトリックス)さん
- BaaS開発者として以下の方々が登壇されていました(敬称略)
- 荒川義弘(株式会社アピアリーズ)さん
- 石塚進(Kii株式会社)さん
- 野田雄也(ニフティ株式会社)さん
各社のBaaSの特徴紹介の後、モデレータの方から出されたテーマを元にBaaS開発者の方が話すという内容でした。その後、参加者からの質疑応答タイムとなっていました。
モデレータの方から出されたテーマを元にBaaS開発者の方が話した内容
(テーマその1.)日本のBaaS市場、これから伸びてゆく?盛り上がってゆく?そして、ぶっちゃけ儲かっている?
(テーマその2.)海外のBaaSベンダーは40社以上あり乱立している。大手の会社もBaaSやろうとしており、海外勢をどう考えている?海外と自分たちのBaaSベンダの違いは何であると考えているか?
- アピアリーズさん
- 海外/国内の違い→日本語対応、サポート。
- 日本国内でワンストップになるのが強みだと考えている。
- Kii株式会社さん
- モバイルでもローカルに特化するのも意味があると考えている。
- マルチサイト対応しているので、日本で作って中国に持っていけるのは自分たちの強みだと考えている。
- ニフティ株式会社さん
- 一番大きいのはサポートが日本であること。
- 企業で使おうと思うと早い時間で日本語でレスポンスがあるのはかなりのメリットと考える。
- (データセンタが日本にあるので)レイテンシが低いのもポイント
- が、海外からのレイテンシが大きくなるという逆の見方もあるとのこと
- アピアリーズさん
(テーマその3.)HTML5jカップでBaaSのからみで→MBaaSでモバイル、ネイティブアプリ/Webアプリという文脈でモバイルに限らずWebアプリを考えたときにBaaS利用はありえる?BaaS利用でHTML5はこれからどうなる?
- アピアリーズさん
- WebアプリでBaaSは十分にアリだと考えている。
- アプリKeyが無くてもOKにしている、WebアプリとBaaSは親和性が高いと考えている。
- Kii株式会社さん
- アリだと思う。元々BaaSに'M'が付くのはMobile(の開発)が特殊だったから
- Ruby on RailsとかはBaaSで置き換えてもよいのではと考えている。
- ネイティブ/Webアプリの文脈→前者はbaaSある。
- WebアプリはBaaSが取りに行ってないし、やろうという人もいない。我々としても後者にチャレンジしたいと考えている。
- ニフティ株式会社さん
- JavaScript SDKでキー書き出す。
- セキュリティはsignatureチェック、機能制限をかけようという考えている。
- PhoneGap→ブラウザオンリーでアプリが作成できるという開発環境。ライトなアプリはこれで十分。
- アピアリーズさん
(テーマその4.)今回の参加者からアンケートを取ったらサーバ系の人が多い。インフラ/DB/ミドルの構成教えて
(テーマその5.)言ってみればBaaSってサーバエンジニアをいらなくする技術なのでは?そう考えた時にサーバエンジニアのキャリアパスは?
質疑応答
Q1.BaaSを使ってmobile appを作ることを考えたとき、どういうアプリがBaaSに向いていると思いますか?
- アピアリーズさん
- 弊社のBaaSではキャンペーンアプリが多いという歴史があり、短期間、低コストであった。
- ヘビーなアクセスがあるようなゲームは自前のインフラとか考慮したりする必要があるので向いてないと思う。
- Kii株式会社さん
- 我々が色々な企業さんと話すと、いろいろなジャンルに向いていると思う。
- BaaSはテクニカルじゃない部分がある。
- アプリを複数持つとバックエンドを共通化したくなる。
- そのため、アプリではなく業務として共通化したいのでは。
- ニフティ株式会社さん
- 私もなんでもできると思っている。
- IaaSと同じでun-controllableなものをどうするかという点ではBaaSも同じ。
- un-controllableな箇所を許容できるならもつ、そうでないなら持たない。
- アピアリーズさん
Q2.将来どこで他社と差別化(機能、料金とか)を図ろうと考えていますか?
Q3.(Kii株式会社さんはオンプレを提供しているが)なぜオンプレしようと思ったのですか?また、他の会社はオンプレやる予定はありますか?
- アピアリーズさん
- オンプレはOEMで提供を検討している会社が数社ある。
- Kii株式会社さん
- オンプレに踏み切った理由→エンプラ向けの需要があるから。
- 米国のBaaS業者もエンプラに行っている。
- 既にあるエンプラ(MEEP)を喰いに行っている。
- ニフティ株式会社さん
- オンプレの話は問い合わせが多々ある。エンプラ系で多い。
- が、現状はできていない。検討は引き続き行っており、うまい方法があるか考えている。
- アピアリーズさん
飛び入りLT
質疑応答の後、自作BaaSサービスを作成された方の飛び入りLTがありました。福岡からの参加(!)とのことでした。
- 発表者は@nobkzさん
- Milkcocoaという自作BaaSサービスの紹介
- エンドユーザがWebアプリを作れないか!という観点で作成した
- あわせてflowerというグラフィカル言語の紹介
- Raspberry Piの上でも稼働するようです
まとめ
BaaS勉強会のメモをまとめてみました。今回は予習をしていったので楽にメモをまとめられると考えていたのですが、やはり四苦八苦してしまいました。メモを取りながら話のつながりをリアルタイムにまとめあげるという要領のよさが必要そうです...。