28102017 Linux
Dr. Bonoの生命科学データ解析を読み返していたら
rsyncって-eオプションでsshに切り替えられるんじゃん!
と気づいて、ちょっと遅くなりかけてた本番環境のデータを開発環境にリモートコピーするっていうscpの作業をrsyncに切り替えたおかけで差分更新できるようになって超早くなって仕事の効率が上がって嬉しい。
あとついでに職場のubuntu(16.04)調べたらrsh入ってた。デフォルトで入るのかな?
28102017 Linux
Dr. Bonoの生命科学データ解析を読み返していたら
rsyncって-eオプションでsshに切り替えられるんじゃん!
と気づいて、ちょっと遅くなりかけてた本番環境のデータを開発環境にリモートコピーするっていうscpの作業をrsyncに切り替えたおかけで差分更新できるようになって超早くなって仕事の効率が上がって嬉しい。
あとついでに職場のubuntu(16.04)調べたらrsh入ってた。デフォルトで入るのかな?
01062016 Linux
もともと10GのHDDで仮想環境(KVM)作ったけど溢れてしまったので拡張した。
ほぼまるごと「KVMでVMにHDD追加」を参考にした
あとは色々調べるのはvgscan, lvscan, pvscanとscan系のコマンドを使えばいい。最近(4,5年前)のFedoraはデフォルトがLVMなので容量追加とか簡単で助かる。
20112014 Linux
最近はホストのサーバーに仮想マシン(KVM)を複数たてて、それぞれnginx+supervisord+gunirocrn+Flaskとかnginx+unicorn+RoRみたいなウェブアプリを動かすパターンが多い。というかそれが全部。
面倒くさいのだけど、(自動化するための手間をかけるほうがよりめんどくさかったので)サービスの起動まで手でやっていたのだが、ちょっと同僚に立ち上げをお願いしなきゃいけなくなって、作業手順を繰り返してもらうのもなんか悪いなーと思ったのでサーバー立ち上げればウェブアプリが動くところまで自動で進むようにすることにした。
まぁ、今更感満載だけどね…(僕はインフラエンジニアじゃないのでそっち方面詳しくないのでそういうところまでやろうとするとコストが半端無いからなぁ)と想いつつもで今どきのウェブアプリ書く人は基本として知らなあかんのかなぁとも思うとしんどいですね。
手順としては
なんだけど、書き出してみるとやっぱり面倒臭い。よく手動で起動していたもんだw
onboot=yesをつけておく。以前試したんだけど何故かうまくいかなくて放置してたけど、これを見ながらきちんと設定したら動いた。
chkconfig NetworkManager off chkconfig network on service NetworkManager stop service network start
このあたりかな。あとfedora19だとこのあたりをいじるとsystemctlとcheckconfigが混在しててややこしい
GUIのアプリを使って仮想マシンを起動してたんだけど、virsh便利。
sudo virsh autostart [vm_name]
で自動起動できるので、最初からそうしておけばよかった。すでにGUIは使っていない。
unicorn+RoRな構成のよくあるRailsアプリだとRedmineをCentOS 7上で動かすーUnicornとNginx編を参考にsystemd用の定義ファイルを用意すればよいです。
supervisord+gunirocrn+Flaskが目下悩み中なのだけど/etc/init.dに書く方法しか見つからなかった。どうせだったらsystemctlコマンドで制御したいので引き続き調べる。
26062012 Linux
ヒトと技術が減少していて、サーバーメンテにコストをかけられなくなってきているので、実機のトラブル時の移行コストがかかりすぎて「移行しないでいいかー」という投げやりな事案が多く発生するようになり、資産がもったいないので自分の管理サーバーは仮想化環境でなんとかすることにした。
本見ながらやったけど、色々試してたらネットワークが繋がらなくなってどうしようもなくなったのでホストを再インストールしたという。
ホストのインストールとか詳しくやらんでいいから、もっとネットワーク周りを充実させて欲しいなぁと思った。 私のニーズはサーバー群を集約して、複数のwebサーバーを一台で管理したいというニーズだったんだが、そこら辺の記述が妙に少ないなぁと。
まずはホストの設定、動くのを確認したらゲストをゆっくり設定すると問題の切り分けが簡単。
ネットワークマネージャの管理下ではなくなるのでFedora17の場合は画面右上のネットワークアイコンに☓がつくがつながることを確認すればOK
libvirtdの軌道はsystemctl
systemctl start libvirtd.service
sshの設定は
yum install openssh-server
つながらない場合はFireWallを疑う。GUIの設定が正しいように見えても再度sshのチェックを付け直すと上手くいったりする。
というわけで、virshの便利さに驚いた6月後半であった。
06012012 Linux
UNIXネットワークプログラミング入門とルーター自作でわかるパケットの流れを読んで、pollとかepollとかlibeventの使い方を覚えたいなぁと思ったらLinuxネットワークプログラミングバイブルってのを見つけた。
というか、ルーター自作でわかるパケットの流れの著者とソケットプログラミングを調べていたときに見つけたブログの著者の共著だったので、即買いした。
小さいけどきちんと動くコードがたくさん載ってて、プログラムはコードで語れという匂いが感じられるのは個人的にはありがたい。8章まで読んだけどわかりやすくて良かった。特に5章の多重化の章はボリュームがあってselect,poll,epollにマルチプロセス、マルチスレッド、ノンブロッキングI/Oのコードが一通り揃っていて知りたいことは全部入ってた。
まだ流し読みしただけで写経はしてないが、Cのネットワークプログラミングはここまでおさえておけば自分的には満足だなぁという感じなので、いい本ゲットしたなぁと思った。
27122011 Linux
Unixネットワークプログラミング入門でTCPとUDPをあつかったので、その勢いでデータリンク層をあつかってみます。
2章は基本。
TCP,UDPと同じようにsocketを使えばいい
soc = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)))
ちなみにTCPの場合はこんな感じ
soc = socket(AF_INET, SOCK_STREAM, 0))
続いてbind
sa.sll_family=PF_PACKET; sa.sll_protocol=htons(ETH_P_IP); sa.sll_ifindex = ifreq.ifr_ifindex; bind(soc,(struct sockaddr *)&sa, sizeof(sa))
と、socをインターフェースに関連付ける
TCPの場合もbindでアドレスとポートに結びつける
me.sin_family = AF_INET; me.sin_addr.s_addr = htonl(INADDR_ANY); me.sin_port = htons(port); bind(soc_waiting, (struct sockaddr *)&me, sizeof(me))
まだ2章までしか読んでいないが、3章でパケットキャプチャ、4章でブリッジ、5章でルータを書いていくという流れになっていて、楽しみ。
ちなみに初心者向けではなくて、著者の暗黙の前提のあたりは説明がさくっと省かれている。 Unixネットワークプログラミング入門を読んでなかったら速攻挫折してたと思う。
ちなみにサンプルコードはmacでは動かない。
23122011 Linux
Nodeを触っているのは楽しいんだけど、じゃぁなんか作りたいものがあるのかと言われたらイマイチ思い浮かばない。リアルタイムウェブ〜とか言っておいて(言ってないけど)アイデアが浮かばないってのはまずかろうとソケットプログラミングの本を読んでみることにした。
ソケットプログラミングを覚えるにはいい本だった。サンプルはCで書いてあるんだけど、システムコールとかの低レベルのモジュールはPerlもPythonもほとんど一緒なので、動きがイメージできるようになって良い感じ。本を読み終えたついでにSocketServerのソースコード読んでみたけど、理解度がさらにあがった。
本の内容は、
非同期はselect使っています。8章でデーモンの入門の章だったんだけど、なんでforkを二回するのかわかりやすい説明ではなかったので、ここを読むといいですね。
3章のチャットっぽいものをPythonとPerlで書いてみた
import socket host = socket.gethostbyname('localhost') port = 50000 soc_waiting = socket.socket(socket.AF_INET, socket.SOCK_STREAM) soc_waiting.bind((host, port)) soc_waiting.listen(1) print "server running at %d\n" % port (soc, client_addr) = soc_waiting.accept() soc_waiting.close() print "Go ahead!" msg = "" while True: msg = raw_input() soc.send(msg) msg = soc.recv(512) print msg if msg == "quit": break soc.close()
import socket host = socket.gethostbyname('localhost') port = 50000 soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) soc.connect((host,port)) print "Wait\n" while True: msg = soc.recv(512) print msg msg = raw_input() soc.send(msg) if msg == "quit": break soc.close()
#!/usr/bin/env perl use IO::Socket; $soc = new IO::Socket::INET("localhost:50000"); die "IO::Socket : $!" unless $soc; print "Wait\n"; my $msg; while (1) { $soc->recv($msg, 512); print $msg,"\n"; $msg = <STDIN>; chomp($msg); $soc->send($msg,512); last if $msg eq "quit"; } close($soc);
Unixネットワークプログラミング欲しいなぁ
今度静岡でおまちバルがあるように、静岡はバルブーム、バルバブル、バブルボブル。で、バルイベントにはハッシュタグとtwitterでつぶやいて盛り上がろう的な今時なソーシャルな仕掛けも一緒についてくるんだけど、これがまじでつまらない。
ハッシュタグが漢字混じりのひらがなとかあり得ないでしょう。そもそも酒飲むイベントで打たせるか?と。全員がiPhoneに向かってカチャカチャやってるIT系のオフじゃないんだから。あと、飲んでる時にハッシュタグでtweetおいかけるのもめんどくさい。結局送りっぱなしになっちゃうので、だれかがまとめたのを読み返すくらいで、全然リアルタイムじゃないね。
というわけで、バルのtweetシステムに不満があったのでソーシャルでスマホ持ちの我々が使って楽しいシステムを考えてみた。
バルラーにちまちまと端末を打たせないように店の入口に「店なうだらー、ハッシュタグ、ジオコード」が入ったQRコードを貼っとく。これで、カメラで撮るだけでtweetできるようになるので酒が良い感じに入っていてもOK。パンフにつけておいてもいいかも。そっちは宣伝で、人気度調査用にしてもいいかもしれん。
で、サーバー側をリアルタイムウェブで、twitterのストリーム読みながらマップ上にマッピングさせていくと。ジオコードの頻度で明るくするとかでもいいしね。そうすればリアルタイムで楽しい。ユーザーの動向を線でつないでも面白いかも(どういう順番で店をまわってんのかとか)。主催者側にもそういうデータが集まればいろいろ役に立つでしょう。
そういうシステムをNode.jsでつくったら楽しいだろうなぁと思った。
最近ちょっとヤル気がおきないので、別のことでもしようとネットワーク関連の本でも読んでみることにした。
そういえばRWHにもSocket通信の章があったので後で読みなおしてみるか。
22092011 Linux
Linuxカーネル2.6解読室の流れで読み始めた。
Linuxも色々勉強しておかないといけない。
そしてこれはまだ読んでいない、積んである。
13072011 Linux
そういう風が吹いているということで