brand new note

ジャズ屋が技術の話をするところ

OpenstackとAnsibleの関係性がわからないので調べた

タイトルの通りです。最近よく聞くAnsibleっていうのが何なのかさっぱり分からず、自動化とか構成管理とかいう言葉と一緒にに流れてくるのを見てOpenstackっぽいサムシングを連想したんですがどうなのか。技術的なことは書いてませんが、調べているうちに背景や今の流行がなんとなくつかめたのでその辺を網羅的にメモします。

とりあえず読むじゃん

qiita.com

www.ntt-tx.co.jp

www.slideshare.net


Infrastructure as a Code

Infrastructure as Code(IaC) というのは、物理的なハードウェア構成やインタラクティブな設定ツールの使用ではない。コンピューティング・インフラ(プロセス、ベアメタルサーバー、仮想サーバー、など)の構成を管理したり、機械処理可能な定義ファイルを設定したり、プロビジョニングを自動化するプロセスである。

Wikipediaより。DevOpsとの関係性の部分ではこのように記されています。

IaCはDevOpsのベスト・プラクティスを実現する重要な要素だろう。開発者はもっと構成の定義に参加するようになり、運用チームは、開発プロセスの初期段階で入ってくるようになる。IaCを活用するツールはサーバーの状態・構成を視覚化し、企業内のユーザーに視覚性を提供し、最終的に努力を最大限にするために、チームを結集することを目指している。 一般的に、自動化は、手作業のプロセスの混乱とエラーの起こりやすい部分を取り除き、より効率的かつ生産的にすることを目指している。手動構成の効率を低下させる複雑さを軽減することも目的としている。柔軟性が高く、ダウンタイムが少なく、全体的に費用効果が高いソフトウェアとアプリケーションを作成できる。 自動化と共同作業は、DevOpsの中心的なポイントであるため、多くの場合、インフラストラクチャ自動化ツールはDevOpsツールチェーンのコンポーネントとして含まれている。


要するにクラウドサービスが盛んになった現在では、開発から運用までをチーム一体となってカバーすることが容易になった。それに伴ってサービス設計の初期段階である「インフラ構築のフェーズ」を様々な技術者に理解してもらいやすくすることが必要となってきた。その為にあれこれを自動化、可視化してより簡単に扱えるようにしよう、という思想が広がり、これがInfrastructure as a Codeと呼ばれるようになった。

で合ってますかね!?

いっぱいサーバが並んでるところで一台一台手作業でソフトを入れたりするのはありえんしんどいので、すべてのサーバが同じ挙動をする仕組みができれば一発で大規模システムも管理できて幸せだよね、という話なんでしょうか。そういえば米microsoftは一人当たり数千台のサーバを管理しているとかいう噂を本で見たのですが、確かにこういうところでならかなりの効率化が期待できますよね。その構成管理のツールのひとつがAnsibleなんですね。

インフラ屋もコードを書くのか

他の構成管理ツールであるChefの場合はRubyベースの定義ファイルに基づく設定が必要です。しかしAnsibleの場合、yamlというマークアップではないけどプログラミング言語でもない記述方法によって簡潔に設定ができるようです。Ansibleの実装はPythonなので詰まったら実際のソースを読んでデバッグすることはあるんでしょうけど、特にPython書けなくても動かすことはできます。これなら俺にもできるだろうか。。。

ぼんやり「インフラエンジニアもこれからはコード書けないといけないということ…?」と思っていましたが、そうともいえるしまだそうでない仕事もある、でもできないと時代に取り残されるかもしれない、という認識です。学ばねばならぬ。

OpenstackとAnsibleの関係

OpenstackのモットーはVMそのものを構成する部品を作る(ブロックデバイスやネットワークIO、認証系など、コンピュータとして必要な機能をまず提供する)とでもいうべきでしょうか。そして、その中で提供する部品の一つに「自動化を助ける機能」があり、ここでChefやAnsibleといったツールが連携します。ソフトウェアの導入、サービスに応じたネットワーク設定等をするための機能です。Openstackの上にAnsibleがのっかっていて、その上に開発するサービスが動くということでしょうか。

またAnsibleはその特性から、短いスパンで改良を遂げているOpenStackとは思想が近く、相性がいいようです。Ansibleは構築したサーバにエージェントを置く必要がなく、端末からsshで設定を流し込むだけで柔軟かつ容易に構成の自動化を行えるからです。逆にあまりにも大規模なサービスの場合はエージェントを置いたChefのほうが良いみたいですね。

/dev/zeroってなんだ

/devはデバイスのdev。データの入出力装置に関する情報を管理しているディレクトリです。/dev/xxxという形でハードディスクやUSBメモリ等、様々なデバイスの情報を格納しています。

/dev/zeroとは

0x00を常に出力し続ける特殊なデバイスのことをさします。とりあえずダミーファイルを作りたい時や、ディスクを0x00で埋め尽くしてデータを消去したい時に用いることができます。一歩間違えると危険そうですね。。。なんか右下にありますね。

f:id:frazz:20180402145316p:plain

/dev/nullとの違い

0x00でデータを埋め尽くしてファイルを作るとファイルサイズがちゃんと0の分だけ存在してくれます。対して、null文字で埋め尽してファイルを作るとファイルサイズは0バイトになります。といってもよく分かんないのでやってみましょう。

f:id:frazz:20180402150555p:plain

検証にddコマンドを使います。bsはブロックサイズ、ifはinput file, ofはoutput fileの略だと思います(たぶん)。/dev/zeroを入力元としてtestファイルを錬成すると、ちゃんとファイルサイズが1000バイトになっていますね。moreで見てみると1000バイト分の空白があるのも確認できます。

次に/dev/nullから同じようにファイルを練成します。

f:id:frazz:20180402151210p:plain

1000バイトと指定してもファイルサイズは0バイトのtestファイルができてしまいました。これが「何もない」と「0がある」の違いです。データっておもしろい。今後何かに使えればいいのですが。。。

参考

qiita.com

ここの方が詳しく載ってますので興味があれば。

個人slackをはじめたらだいぶ良い感じって話

slack.com

slackというツールをご存知でしょうか?コミュニケーションツールの一つなのですがLINEとは雰囲気が全然違っていて、トークルーム(チャンネル)の管理やチャットがスマホだけでなくPCでも柔軟に出来るのが特徴です。自分も研究室に入ってからはLINEと同じくらい利用していて、社会人の方も使っている方は多いのではないかと思います。

メインはコミュニケーションツールとして使うslackですが、ちょっと教わって「個人でやるslack」がとても便利だということを知りました。メモ。

普通に高性能なメモ帳として使える

qiita.com

大体この記事を読む場合が多いと思うので挙げておきます。まずコミュニケーションの場の単位としてもっとも大きいのがワークスペースです。ワークスペースを作ることは誰でもできるので、まず自分用のワークスペースを作成します。

で、誰も招待せずにチャンネルには「ここはこのメモ!」と分かるように名前を付け、それらを一人で全部使うのです。

こうすることにより日々のタスクやらメモやら独り言を掲示板形式で書きためておく事が出来ます。

アプリ連携が非常に強い

で、アプリケーションの連携が非常に高機能なところもslackの強みです。twitterの情報を垂れ流すこともgoogleカレンダーやtrelloのタスク管理と連携*1することもできますし、githubともインスタともOneDriveとも連携できます。なんでもできます。

スマホにアプリが沢山入っている方も連携機能を使いこなせばslack一つ見るだけで様々な用事を済ませることができるかもしれません。

f:id:frazz:20180328231326p:plain

ちなみに自分は連携機能についてはまだまだ使いこなせてないので、シェル芸botを垂れ流すくらいしか使用用途を思いつくことができません*2。既にだいぶ楽しいですけど。こんな感じで、チャンネル毎に色々メモを残しておくことができますので、最近はノート取るのはネットが使えない外出先だけになってきました。PCが使えて家で一人で作業ができる時のメモはほとんどこっちにシフトしましたね。

おわりに

slackを知ってる方は結構この使い方をしている方が多いので今更感があるかもしれません。しかし知らない方や使って日が浅い方には全く馴染みがないと思います。コミュニケーションツールとしても、予定管理やメモのツールとしても非常に有用なのでおすすめです。

tmuxのはじめの一歩

tmux歴1年くらいになったのでちょっとまとめ。ずいぶん前から書こうとしていたのですが放置していました。

tmuxとは

1つのターミナルで複数のサーバにログインし、同時にセッションを保ちながら作業ができます。これがないと複数のサーバに一度にアクセスして作業したいときに1つずつターミナルを立ち上げなきゃいけないので、あるととても便利。一度このサーバとこのサーバに入って作業がしたい!ってなったら、未使用中でもその作業環境を保存できます。

参考サイト

自分の記事より100万倍参考になるサイトを先に紹介しておきます。

概念はここ読めばいいと思います。

基本的にはこのへん読めば使えます。

強い人はこういうことしてるらしいです。

とりあえず、基本的な説明も以下に示します。


セッション、ウィンドウ、ペイン

まずtmuxには3つのキーワードがありますので頭にいれましょう。

  • セッション:tmux全体で管理しているサーバへのセッション情報(接続情報)

  • ウィンドウ:接続した先のウィンドウ。

  • ペイン:ウィンドウは分割することができる。分割したものの一部をペインという。

次に実際にtmux実行時の画面を使って説明します。みんなもやってみよう!!

ペインを割る

# tmux

f:id:frazz:20180328170349p:plain

起動しました、下が緑色になってウィンドウの名前を表示しています。このようにただコマンドを打つだけでも起動しますがこれでは使う意味がありませんので、ペインを分割してみます。Ctrl+b→%と入力してみます。

f:id:frazz:20180328171149p:plain

ウィンドウが横に割れました。次にCtrl+b→” と入力してみます。

f:id:frazz:20180328172401p:plain

そこからウィンドウが縦に割れました。このように一つの画面で複数のターミナルを開くことができます。あと、隣のペインに移動する時はCtrl+b→矢印キーです。ペインを消すときはCtrl+b→xです。まずはこれだけ覚えると作業してる感に満ち溢れてテンションが上がると思います(?)。

ウィンドウを増やす

しかしペインを割るだけではどんどんひとつの作業スペースが狭まります。新しいウィンドウを作るにはCtrl+b→cです。

f:id:frazz:20180328173205p:plain

新しいウィンドウが作られ、下にウィンドウ0とウィンドウ1が見えますね。このように作業スペースが確保できない場合はウィンドウを増やします。ウィンドウ間を移動する時はCtrl+b→n もしくは Ctrl+b→p です。(nextとprevだと思います)

Ctrl+b ってなに

散々出てきているCtrl+bはプレフィクスキーと呼ばれます。要するにtmuxの処理を行うために必要な最初のコールのようなものです。使いこなせるようになったら独自のキーバインドを作ることも可能ですので、段々自分の作業がしやすいようにカスタマイズできると楽しいと思います。

セッション管理

ここまでできたら普通にターミナルを開くよりも、確実に一度に様々なアクセスができるようになっていると思いますが、こことここにアクセスした記録をそのまま残して次回以降は一瞬で立ち上げたいという欲が湧いてきます。

ここで使えるのがセッション管理の概念です。

本記事を見ながら手を動かしている方はCtrl+b→dしてみてください。

f:id:frazz:20180328174949p:plain

tmuxが消えて元の画面に戻りました。これをセッションを抜ける、デタッチするといいます。今作業していた直前のセッションにもう一度入る、アタッチするには以下です。

# tmux attach

過去に名前を付けて保存したセッションに再度入るには以下です。

# tmux attach -t [session name]

はい、セッション名の話もしないといけませんね。直前の環境だけでなく、この作業環境とこの作業環境を分かりやすく残しておきたい。。。という場合は起動時に予めセッション名をつけます。

f:id:frazz:20180328180257p:plain

ここからは上図の説明になりますが、tmux new -s hogehogeというセッション(作業環境)を作成しています。tmux ls することで現在作られているセッションを見ることができます。いらないセッションはtmux kill-session -t [セッション名]で消すことができます。

注意事項

ここまで覚えたらあとはもっと便利に使えるように調べていくのがいいと思います。ただ、セッションの概念を理解せず普通にexitとかしてtmuxを閉じてしまうと、一度作った作業環境が保存されず作り直しになったりすることになります。

また、exitもせずCtrl+b→xでペインだけ消してそのまま全部作業環境を消してしまうと、サーバに接続している情報が残ったまま作業環境が消えてしまうことになります。こうなるとログアウト作業が別に発生してしまいます。(自分はこれで2週間サーバに知らずにログインしっぱなしになって注意されたことがあります、勉強にはなりましたが。。。)

というわけで、tmux初めての皆さんもこちらに気を付けて作業していただければと思います。では。

C言語のめも:03/26

パケットを投げるプログラムを拾ってきたので読んでいます。。。

ソケットプログラミングのヘッダファイル

  • sys/socket.h
  • netinet/in.h
  • arpa/inet.h

L3L4ヘッダ定義用のヘッダファイル


hexdump([バッファ用メモリアドレス][index])

main関数の中で呼び出されたらindexのぶんだけバッファのアドレスを出力? デバッグ用?

  • uint8_t

  • uint16_t

  • uint32_t

型。ヘッダ情報を構造体で作る、IPとプロトコルとレングス?


main関数

argvはプログラムに渡す引数の配列?

IPはポインタで??

char *data:IPヘッダの最終番地を入れる、ペイロードの開始番地に等しい? 細かいヘッダの中身はmain内で定義されている、代わりに大まかな作りは関数にまとめている

TCPヘッダ、synフラグだけ1になってる

ウィンドウサイズ:htons(155)とは。。

送るbyte数はsendto()の中で定義されたものが代入される

送れない場合はbyte数が負の数だったときと仮定してperrorを返す

Inside Linux Softwareを読んだ

前回linuxのしくみを読んでから次の本に行きたくなったので、ブックオフでこちらを買ってきました。

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

ほんとは購入するとき横にlinuxデバイスドライバとかあってそっちを買えたらよかったなーと思っていたのですが、あまりにも理解ができないのでちょっと他の本を間に挟んで様子見することにしました。とはいえこちらも難しいので進捗は随時追記します。

読んでみて

本の内容は、一言で言うとlinuxを用いたソフトウェア開発の中身の説明です。前回読んだ「linuxのしくみ」は、メモリやプロセスやCPUの挙動、いわばコンピュータの基礎知識をlinuxを用いて確認するといった内容でした。本書はOSS等の開発をする際に目にする、コンパイラやマクロ、パッケージの挙動がどうなっているかを詳解した内容となっており、よりプログラミングの知識を必要とする実践的な内容であるように思います。今までの読書を足がかりにして理解できる部分もちらほらあるのですが、読んだことのない、あるいは触ったことのない部分が個人的にはかなり多いので勉強になります。

また本書は、「開発者がlinuxを用いたソフトウェア開発に実際に必要なノウハウを詰めた一冊」ともいえるでしょうか。分かりやすく混み行ったっところを言えば、manページの書き方なんかも紹介されています。読んでいて面白いのですがネットワーク寄りの自分が見た感覚としては、完全に基礎から一歩抜け出した内容だなーという印象を受けました。

3/26

プログラミングの基礎がちょっと分かったかなと思った。

冒頭では開発に必要なCを用いたプログラミングの基礎が説明されています。といっても「よくあるCの入門書の次の段階」を説明しているので、何も分からないところから読み進めるのはちょっと大変だと思います。具体的にはマクロや関数あたりの細かい説明、ヘッダファイルの存在意義等。個人的には、「これはおまじないだから取り敢えず覚えておきましょう」の「おまじない」がやっとちゃんと見えてきたなという感じがありました。

5/6

まだがっつりこの本の内容は理解できない。

というのも他の本を先に読んだほうがいいかなと思ったんですね。今は本業サーバですし、それすらあまり進捗出てないし。。。もっと空き時間を見つけてソースの読み書きをしないと、この本の内容までたどり着けないなーと。でもUNIXで開発をするための一つのゴールとしてこの本を見つけられた事は自分なりの収穫かなと思いますね。もうちょっと頑張ります。

その他

前回読んだ本の記事はこちら。

試して理解-Linuxのしくみを読んだ - brand new note

Microsoft OneDriveを使ってみる

ノートPCを新調し、研究やら外出先での作業やらがもっと快適にならないか考えていたところ、クラウドをちゃんと活用してみる考えに至りました。めも。

Microsoft OneDriveとは

f:id:frazz:20180323145558p:plain

win10を使っているとこういうのが左側に出てきますよね、これがMicrosoftが個人向けに提供するクラウドサービスのOneDriveです。今まで使いどころが全く分からなかったんですが、家のPC、外出先で作業するノートPC、研究室のPC等、一人で使い勝手に合わせて複数台使っている自分の場合、重宝します。

microsoftアカウントがあればデータをクラウド上に投げて共有できるので、あのPCに入ってた作業ファイルが家で使えない!外出先で使えない!といった悩みがなくなります。

ブログ書くのに便利

ブログ書くと作業写真とかスクリーンショットとか上げたくなるのですがデータ管理が大変です。

dropboxとかicloudとかgoogleドライブも使ったことはあるんですが、個人的には決まり手がありませんでした。

OneDriveの場合、PrtScキーでスクショを撮ったらそのままOneDrive上にアップロードしてくれるんですね。しかもスマホと同期すればそのファイルがスマホからでも見える、スマホで撮ったスクショもPC側ですぐ使える、この連動性が気に入りました。

f:id:frazz:20180323145444p:plain f:id:frazz:20180323145059p:plain

他のクラウドサービスでも似たようなことはできると思うんですが、一式Microsoftさんのツールを使うのが結局効率がいいんですよね。これはmac使いがicloud使うのと大差ないと思いますけど。

そんな感じ

研究室の作業環境も非常に便利なんですが、学びをもとに自分で作業環境を作れないとこの先不便だなーと思うこの頃です。あとはポケットwifiがあれば外出先でも無双できるのですが。。。