ssh + su環境でServerspec/Specinfraを利用するためのバックエンドを書いた
こんにちは。業務都合上、サーバー運用ではsudoが使えずsuでrootになって作業を行わなければならないhayajoです。
Specinfraのsshバックエンドはsudoでのコマンド実行を前提としているため、suでrootになって運用しているサーバーに対してSpecinfra/Serverspecを実行するには少々手間がかかります。(Specinfra.configuration.disable_sudo + run_commandでexpect実行とか)
そこでSSH + suでのコマンド実行を行うSpecinfraバックエンドを書きました。
- specinfra-backend-extension-ssh_su | RubyGems.org | your community gem host
- hayajo/specinfra-backend-extension-ssh_su
Specinfraでの使用例はこんな感じです。
require 'specinfra' require 'specinfra/helper/set' require 'specinfra/backend/extension/ssh_su' require 'highline/import' include Specinfra::Helper::Set include Specinfra::Helper::Os host = ARGV[0] set :host, host set :backend, :ssh_su options = Net::SSH::Config.for(host) options[:user] = ask("Enter ssh user: ") options[:password] = ask("Enter ssh password: ") { |q| q.echo = false } set :ssh_options, options set :su_password, ask("Enter su password: ") { |q| q.echo = false } puts Specinfra::Runner::run_command('whoami').stdout puts Specinfra::Runner::run_command('cat /etc/passwd | grep `whoami`').stdout set :os, os if Specinfra.configuration.os[:family] == 'redhat' puts Specinfra::Runner::install_package('epel-release').stdout end puts Specinfra::Runner::install_package('nginx').stdout
モジュールをrequireし、バックエンドにssh_suを指定して使います。Serverspecで使用する場合も同様です。
configurationはsshバックエンドとほぼ同様で、sudo*のものをsu*に置き換えてください。
suのパスワードプロンプトはデフォルトで"Password: "を想定していますが、ロケールを変更した場合など、対象サーバーのプロンプトと異なる場合はsu_promptを設定して調整してください。
suで運用する環境は減ってきていると思うので需要はあまりないとは思いますが、そのようなホストに対してSpecinfra/Serverspecを実行したい場合は使ってみてはいかがでしょうか。
不具合がありましたらGihubのIssuやプルリクエストをお願いします。
Mojolicious::Plugin::Web::Auth 0.05 をリリースしました
OAuth 1.0(A) 関連の実装を修正しました。
これで Twitter や Dropbox の認証が Hypnotoad の他に Starman や Starlet でも動作するようになったはずです。
ご確認ください。
Mojolicious-Plugin-Web-Auth-0.05
Thanks id:kechiya
Mojolicious 4.42 に Form Validation が(試験的に)実装されたようなので使ってみた
ドキュメントはこちら。
試験的ということなのでインターフェースが変わってしまうかもしれませんね。
M::P::TagHelpers側である程度よしなにしてくれるのはお手軽でいいですね。
Mojolicious::Validator と Mojolicious::Validator::Validation の関係がいまいちわかりづらい感じがする...
Scala入学式でScalaについて学んできました。あとだれかGo教えて。
ひさしぶりのブログです。
先日長岡市で行われた第33回勉強会 Scala入学式に行ってきました。
「ScalaってJavaVMで動く関数型っぽい言語」という程度の認識です。そもそもJavaなんてJDK5の知識が少々ある程度なのです。
Java書いてた頃のことは個人的に思い出したくもないのですが、流行り(?)の言語なので、さわりだけでも学んでみようと思い参加した次第です。
入学試験
事前準備としてScalaとIntelliJ IDEA、SBTのインストールを行いました。
IDEなんて使うの数年ぶりなので、プラグインのインストール、設定などは「これ何やってんの??」状態でした。
個人的にはIDEありきの開発はあまり好きではないのですが、コード補完はやはり便利です。時としてこだわりは捨てたほうが良いですね。
ちなみにVimmerな方はこちらで紹介されているIdeaVimマジオススメ。
「Better Java としての Scala」
"Hello World" からはじまり、クラス、継承、traitをひと通り。
素のJava書くよりすっきりしてて良いですね。
サクサクとtraitを追加して型チェックできるのはとても参考になった。
写経しながらGo言語で同じの書こうとしたけどスッキリ書けなくてやめてしまった。
Go言語でオブジェクト指向的に書こうとするとなかなかキビシイものがあるような気がするけど趣味の範囲でしかさわってないので経験不足なだけだと。とくにinterfaceまわりの理解が怪しい。精進せな。
「もっとScala!」
リスト、パターンマッチ、Option型などもりだくさん。
正直パターンマッチ以後なんとなく理解...できたかなぁ。
Futureモナドのところで「Goではチャネルを返して云々...」などと脳内でゴニョゴニョやってるから理解できんのだよ。
「NullPoGaBot」
ここまで出来るとは思いませんでした。
ScalaはJavaの資産をそのまま使えるのでTwitter4Jを使ってサクっとbotを実装。このへんはありがたいんだろうな。
写経でいっぱいいっぱいだったけど、コード見返して復習しよう。
LT
LTでは東京勢の面白さに圧倒されましたw
電流とかTGS 2013 in 長岡とかw
懇親会
有名人なmoznionくんとお話できてとても嬉しかったです。Perlについてゆっくりと話を聞きたかったけど、ピーエイチピーについて熱く語っていたようなのでそっとしておいたw
オッサンには刺激の強い子だった。(すごく良い意味で)
dictavさんとはgolangの話で盛り上がったので、いずれ何かしらやるかもしれません。(じじ(じ)?回にGo言語勉強会やるかも)
というわけで
ボスがScalaの人になって帰ってきたけどNiigata.pmのことも気にしているようですし、近く西区飲みでそのあたりを詰めていければと考えています。
あとモンハンしながらGo言語教えてくれる人募集中です(いない)
Vagrant 1.1+ でスナップショット
Vagrantでスナップショットと言えばsahara(1.1+対応版)が大人気のようですが、1.1+で同等の機能が欲しいのであればvagrant-vbox-snapshotがいいんじゃないでしょうか。
サクッとインストールできますしね。
$ vagrant plugin install vagrant-vbox-snapshot
使い方はこんな感じ。
$ vagrant up $ vagrant snapshot take init # initという名前でスナップショットを作成 なんか作業とかする $ vagrant snapshot back # 最新のスナップショットにロールバック なんか作業とかする $ vagrant snapshot take fix # fixという名前でスナップショットを作成 なんか作業とかするも気に入らない $ vagrant snapshot go init # initスナップショットに戻る ...そして作業は続く...
ラベルを指定してスナップショット作成、ロールバックできるのは便利ですね。
sahara対応したようですし、shanaraつかったほうが情報多くて良いかと
sudo sudo #{cmd} で失敗
@gosukenator rootユーザをsudoersに入れてないと、2回目のsudoでエラーになりますねー。そういう環境はみたことあります
— fujiwara (@fujiwara) 2013, 6月 12
確かにsudoersにrootがなかった。
こんな環境はじめて。
Millaで特定のOSのみサポートするモジュールを作る
Dist::Millaで特定のOSのみ(or 以外を)サポートするようなモジュールをつくりたいときはDist::Zilla::Plugin::AssertOSを使ってdist.iniをこんな感じに定義します。
[@Milla] [AssertOS] ; MSWin32 or CygwinをNGとする os = -MicrosoftWindows [Prereqs / ConfigureRequires] ; configure_requiresに追加するためのおまじない Devel::AssertOS = 0 [MetaNoIndex] ; Dist::Zilla::Plugin::AssertOSでno_indexが上書きされるので再定義 directory = t directory = xt directory = inc directory = share directory = eg directory = examples
で、Dist::Zilla::Plugin::AssertOSをインストールします。(既にインストールされている場合は不要です)
$ milla authordeps | cpanm
上記dist.iniでこんな感じのBuild.PLが生成されます。
use lib 'inc'; use Devel::AssertOS qw[-MicrosoftWindows]; use 5.008005; use Module::Build::Tiny 0.019; Build_PL();
お手軽ですね。
- CPANモジュールでサポートしていないOSのTest ReportをNA(Not Available)にする - WebService::Blog->new( user => ’hide_o_55’ )
- Dist::Milla - Distribution builder, Opinionated but Unobtrusive - metacpan.org
- Dist::Zilla::Plugin::AssertOS - Require that our distribution is running on a particular OS - metacpan.org
- Devel::AssertOS - require that we are running on a particular OS - metacpan.org