Swiftではじめよう その2

7月 1st, 2014

前回の続きをやる前に一つ。

playground でコードを書いていると実行結果が見えてスバラシイ!って聞いていたのですが、

ShellScritpt を書きながらquickrun(vimのプラグイン)を実行するイメージだったんです。。

irbやらpryやらインタラクティブなプロンプトを期待していました。

 

そんな感じで困っていたら、swiftコマンドをターミナル上で実行すると上記の悩みが解決出来ると聞きました。

ターミナルを起動してswiftコマンドを実行するもcommand not found

 

私の場合はここにありました。

/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

 

PATHを探して、.bash_profile や.zshrcに追加してあげましょう。

export PATH=/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:/Users/osho-3/local/ruby-1.9.3/bin:$PATH

プロンプトを抜ける時は

:quit

です。コロンを忘れるとエラーになるので注意です。

 

追記:2014/07/03

playground上でバックスラッシュが出なくて困っていました。

xcode バックスラッシュでググったら出てきた。

option + ¥ -> \

となります。

今までエディターはvimでしたので困った事が無くて知りませんでした。

 

つづく

 

vimのアップデート

7月 1st, 2014

いつまで待ってもvimの7.3~ がyumでインストールされず.vimrcのエラーが出まくる。

疲れたのでアップデートする事にしました。

 

今回からmercurilaを利用してインストールとアップデートをしていきます。

mercurialはBTS(BugTrackSystem)です。

すみません、聞いたことなかったです。

yum install mercurial

hg clone https://vim.googlecode.com/hg/ vim

cd vim

少々パッケージが必要でした。

yum install gcc python python-devel ncurses-devel python-setuptools

下記で指定しているprefixは個人のディレクトリにするなり、システムワイドな環境にするなりしてください。

./configure –prefix=/usr/local/vim7.4

make && make install

 

以降のupdateはpullを行い、updateコマンドを実行

cd vim

hg pull

hg update

 

Swiftではじめよう その1

6月 20th, 2014

Swiftとは

AppleがWWDC2014で発表したプログラミング言語です。

Ccoa,Cocoa Touchに対応したMac OSX,iOSの開発を目的としています。

Objective-Cに変わるものとされています。

今後はオープンソース化されApple製品以外でも使われるかもしれません。

 

インフラをメインにやってきてどの言語もモノになっていないので、このビッグウェーブに乗ろうと思いました。

iOS Developer Programmingに申し込む所からです。

 

AppleIDの取得をして下さい。すでにiPhoneやiPad、Macを持っている方は取得されているかと思います。

次に、下記サイトの右上、Member Centerをクリックします。

https://developer.apple.com

ここから先は先人が詳しく書いてくれているので参照してください。

ちなみにApppleIDの名前はアルファベット表記に変更してから申し込んだほうがよいようです。

エラーになって再実行を促され、結局1ヶ月くらいかかったと複数の同僚が言っていました。

 

用意するのはxcode6betaが動くmac

Swiftの教科書としては、iBooksで無料で手に入れる事ができます。検索窓でswiftと入力して下さい。

私はKindleで発売された 先取り!Swiftを購入しました。

 

では、早速xcode6betaを起動します。

一番上のplaygroundを選択します。

あとは実際にコードを書いて右の画面に表示される実行画面を見ていきましょう。

 

定数、変数について

キャメルケースを使うようです。

定数はletから始めます。

変数はvarから始めます。

let myName = “osho”

var lastName = “333”

 

Swiftの型について

String:文字列

Array:配列

Dictionary:Swift(Objective-C)では連想配列(Hash)を辞書型(Dictionary)と呼びます。

Int:マイナスを含む整数値

UInt:0から始まる整数値

Float:32bit浮動小数点

Double:64bit浮動小数点

Bool:true or false

 

Swiftでは変数の宣言をする際に型の宣言をしなければ値によってSwiftが自動で判断してくれます。

var name: String = “osho”

name = 333  /*これはエラーになります*/

name = “333” //これなら大丈夫

 

つづく

awkで計算

5月 2nd, 2014

たまに使うけど忘れるからメモ

awk ‘{sum += $1}END{print sum}’ hoge.csv

1カラム目の数値を積算して結果だけをprintする

ENDを指定しないと行数分printされるのでだるいよ

LDAPユーザのパスワード変更について

3月 10th, 2014

ldappasswd -x -D “cn=Manager,o=company,dc=jp” -S -w ********* “uid=user,ou=People,dc=private,dc=jp”

-wに渡すパスワードはslappasswdで作成し、slapd.confに下記の様に書き込んだものです。
rootpw {SSHA}H6XYg0123ishfuaiosd234234dsfiaso

sedででかいファイルを扱うときについて

3月 7th, 2014

DNSのシステムにtinydnsというコンパクトな設計のDNSがあります。
ファイルで管理しているのですが、BINDと比べて設定行が非常に少ないのが特徴です。

例えばAレコードと逆引きの設定は一行で済みます。
=mod-cband.heteml.jp.:210.188.195.42

これだけです。あとはtinydnsに付属するzone-makeコマンドを実行するだけです。
コンテンツサーバーの設定自体はもう少しあるのですが、割愛します。

今日の本題はsedです。
上記のように簡単な記述でできるファイルも時が経てば巨大なファイルになります。
数百万行のファイルができてもおかしくありません。
このようなときに特定の行だけ削除したいなと思っても楽ではありません。

今回はagとsedで解決します。
想定としては数百万行のファイルのどこかにある”mod-cband.heteml.jp”というドメインを削除することです。
できるだけ、はやく。。

agのインストールはglidenoteさんのサイトを参考にするといいと思います。
$ag mod-cband.heteml.jp data #dataとはDNSのレコードが記述されているテキストファイルです。
1295883:=mod-cband.heteml.jp:210.188.195.42
1295884:Cmod-cband.heteml.jp:users87.heteml.jp.

記述されている行数が分かりました。
このときに直接消さない理由として確認をするためです。

$sed -i -e ‘1295881,1295882d’ data
これで指定した行だけが削除されるので、その後の数百万行の処理は飛ばされます。(sedは一行ずつ処理していくので指定がないと最下行まで見に行きます)
では本当に消えたのか指定した行だけを表示させてみます。

$sed -n ‘1295881,1295882p’ data
1295883:=not-cband.heteml.jp:210.188.195.42
1295884:Cnot-cband.heteml.jp:users87.heteml.jp.
このように次の行が繰り上がります。

※heteml.jpさんがtinydnsを使っているかどうかは分かりませんが、digなどで調査したレコードを参考に記述しています。

指定行から最終行までを抽出

$sed -n ‘1234,$p’ data

1234行目から最終行までをだしています。

最終行は$で表します。

 

kvmについて

2月 18th, 2014

構築環境のCPUが対応しているか確認

cat /proc/cpuinfo |grep –color vmx

moduleを読み込んでいるか確認

lsmod | grep -i kvm
kvm_intel 54285 0
kvm 333172 1 kvm_intel

読み込まれていなければmodprobeで設定

modprobe kvm
modprobe kvm_intel

パッケージのインストール

yum groupinstall “Virtualization client” “Virtualization Platform” “Virtualization Tools”

ブリッジの設定。kvmは通常NATで動作するようで、使いづらいのでブリッジへ変更します。

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:a0:d1:ee:2c:2c
IPV6INIT=yes
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID=”daa0d323-5288-4c23-8618-90a8cf1cc82b”
BRIDGE=br0

cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=none
HWADDR=00:a0:d1:ee:2c:2c
IPV6INIT=yes
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Bridge
UUID=”daa0d323-5288-4c23-8618-90a8cf1cc82b”
IPADDR=***.***.***.*** #eth0で設定していたIPをそのまま使います
NETMASK=255.255.255.0
GATEWAY=***.***.***.*** #eth0で設定していたGWを設定します
DNS1=8.8.8.8
USERCTL=no

iptablesで遮断されないように設定

vi /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

保存して反映
sysctl -p

ネットワークの再起動をして疎通が出来ればブリッジの設定完了

チェインルールの一括削除について

2月 7th, 2014

前回書いたiptablesについて失敗したのでしたためて、後人が同じ轍を踏まないことを祈ります。

RH-Firewall-1-INPUT というチェインにおいてtargetがDROPのラインナンバーを抽出し、削除するという意図のワンライナーです。

iptables  -L RH-Firewall-1-INPUT -n –line-numbers |grep DROP | awk ‘{print $1}’ |xargs -i echo “/sbin/iptables -D RH-Firewall-1-INPUT {}”

これを実行してしまったときに、意図しないルールが削除されてしまいました。

実際に実行されたコマンド

/sbin/iptables -D RH-Firewall-1-INPUT 6
/sbin/iptables -D RH-Firewall-1-INPUT 7
/sbin/iptables -D RH-Firewall-1-INPUT 8
/sbin/iptables -D RH-Firewall-1-INPUT 9
/sbin/iptables -D RH-Firewall-1-INPUT 10
/sbin/iptables -D RH-Firewall-1-INPUT 11
/sbin/iptables -D RH-Firewall-1-INPUT 12
/sbin/iptables -D RH-Firewall-1-INPUT 13
/sbin/iptables -D RH-Firewall-1-INPUT 14
/sbin/iptables -D RH-Firewall-1-INPUT 15
/sbin/iptables -D RH-Firewall-1-INPUT 16
/sbin/iptables -D RH-Firewall-1-INPUT 17
/sbin/iptables -D RH-Firewall-1-INPUT 18
/sbin/iptables -D RH-Firewall-1-INPUT 19
/sbin/iptables -D RH-Firewall-1-INPUT 20
/sbin/iptables -D RH-Firewall-1-INPUT 21

昇順の値を順に削除していくと、番号はshiftしていくのが原因です。下のサンプルで説明します。

 

$ iptables -L RH-Firewall-1-INPUT -n –line-numbers | egrep “^6|^7”
6 DROP tcp — 10.0.0.1 0.0.0.0/0 state NEW tcp
7 DROP tcp — 10.0.0.2 0.0.0.0/0 state NEW tcp

$ iptables -D RH-Firewall-1-INPUT 6

$ iptables -L RH-Firewall-1-INPUT -n –line-numbers | egrep “^6|^7”
6 DROP tcp — 10.0.0.2 0.0.0.0/0 state NEW tcp
7 DROP tcp — 10.0.0.3 0.0.0.0/0 state NEW tcp

 

このように7番のルールが6番に繰り上げられます。

こうなってしまうと21番のルールは意図しなかったルールを削除してしまうことになりますね。

そのため一括削除を行う場合は降順にソートする必要があります。

sortのオプションも自然数(-n)で降順(-r)が必須です。気をつけましょう。

/sbin/iptables  -L RH-Firewall-1-INPUT -n –line-numbers |grep DROP | awk ‘{print $1}’ |sort -nr |xargs -i echo “/sbin/iptables -D RH-Firewall-1-INPUT {}”

 

本来実行されるべきコマンドはこっちなのでした。

/sbin/iptables -D RH-Firewall-1-INPUT 21
/sbin/iptables -D RH-Firewall-1-INPUT 20
/sbin/iptables -D RH-Firewall-1-INPUT 19
/sbin/iptables -D RH-Firewall-1-INPUT 18
/sbin/iptables -D RH-Firewall-1-INPUT 17
/sbin/iptables -D RH-Firewall-1-INPUT 16
/sbin/iptables -D RH-Firewall-1-INPUT 15
/sbin/iptables -D RH-Firewall-1-INPUT 14
/sbin/iptables -D RH-Firewall-1-INPUT 13
/sbin/iptables -D RH-Firewall-1-INPUT 12
/sbin/iptables -D RH-Firewall-1-INPUT 11
/sbin/iptables -D RH-Firewall-1-INPUT 10
/sbin/iptables -D RH-Firewall-1-INPUT 9
/sbin/iptables -D RH-Firewall-1-INPUT 8
/sbin/iptables -D RH-Firewall-1-INPUT 7
/sbin/iptables -D RH-Firewall-1-INPUT 6

daemontoolsでうまく起動しない

2月 5th, 2014

なぜかlockファイル周りでエラーを吐いて動かない。

supervise: fatal: unable to acquire dnscache/supervise/lock: temporary failure

サービスは仮にdnscacheとしていますが、適宜お使いのサービスに置き換えて下さい。

これで解決

# svc -dx /service/dnscache/
# svc -dx /service/dnscache/log

init.d以下の起動スクリプトとsvscanの起動で多重起動している場合があるので、killすることもありました。

LDAP関連の設定ファイルについて

2月 5th, 2014

LDAPの設定をすると似たような名前のファイルがあり、混乱しがちです。

各設定ファイルの違いをメモしておきたいと思います。

・LDAPサーバーとしての設定ファイルです。
/etc/openldap/slapd.conf

・pam_ldap、nss_ldap から参照されるファイルです。
nsswitch.conf で 「ldap」 を設定すると、このファイルをみて処理されます。
/etc/ldap.conf

・ldapsearch コマンドを実行する際に -x のみを指定すると、他に必要なパラメータはこのファイルから読みこまれます。 ldapsearch はLDAPサーバとの接続性を確認するものであって、正しくLDAPの情報が参照できても、PAM認証が正常に動くわけではないらしい。
/etc/openldap/ldap.conf

・pamモジュールの設定
/etc/pam.d/system-auth-ac
/etc/pam.d/password-auth-ac
/etc/pam_ldap.conf

・LDAPサーバーに問い合わせるデーモンの設定ファイル
/etc/nslcd.conf

・名前サービスの解決順序を設定するファイル
/etc/nsswitch.conf

・TCPwrapper slapd: 許可IP
/etc/hosts.allow

・iptables 389空いてる?
/etc/sysconfig/iptables or /sbin/iptables -L -n

上記のファイルを見直せばなんとかなるんじゃないでしょうか。