ビットの海

ゆるふわソフトウェアエンジニアしゃぜのブログ

apt用proxyをrepositoryによっては使いたくないとき

少しハマったので、メモがてら。

社内のdebリポジトリとかがある環境(例えば、http://192.168.1.1/aptとかとする)で、例えば/etc/apt/sources.listに以下のような記述をしたとする。

/etc/apt/sources.list

deb http://192.168.1.1/apt/ ./
deb http://jp.archive.ubuntu.com/ubuntu/ xenial main universe multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-security main universe multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates main universe multiverse

この状態で外のjp.arhive.ubuntu.comにアクセスするために、下記のようにProxyを設定すると、困ったことに192.168.1.1との通信でもproxyを使おうとしてしまう。まぁ、当たり前なんだけど。

/etc/apt/apt.conf

Acquire::http::proxy "http://myproxy.local";

そんな時は"DIRECT"指定ができるらしく、Proxy使いたくないリポジトリはDIRECTとして書いてあげれば良いらしい。

/etc/apt/apt.conf

Acquire::http::proxy::192.168.1.1 "DIRECT";
Acquire::http::proxy "http://myproxy.local";

べんりー

参考

networking - acquire::http::proxy for only specified repositories - Ask Ubuntu

serverspecの結果を雑にslack通知させる為のrspecカスタムフォーマッタ書いた

Jenkinsとかから実行してる時は、そっちでやればいいんだけど、単体でcronとか実行してるときに通知させたいなーと思って。

前提

  • rspec3系
  • serverspecとしてふつーに動く状態
  • slack incoming webhookのurlをとっておく

Gemfileにslack-notifierたす

source 'https://rubygems.org'

gem 'serverspec'
gem 'rake'
gem 'slack-notifier'

lib/slack_formatter.rbを書く

require 'rspec'
require 'slack-notifier'

RSpec::Support.require_rspec_core "formatters/base_formatter"

class SlackFormatter < RSpec::Core::Formatters::BaseFormatter
  RSpec::Core::Formatters.register self, :example_passed, :example_failed

  def initialize(output)
    super(output)
    @results = Array.new
  end

  def example_passed(notification)
    @results << "OK"
  end

  def example_failed(notification)
    @results << "NG"
  end

  def close(notification)
    post_slack()
  end

  def post_slack
    notifier = Slack::Notifier.new('webhook-url')

    if @results.include?("NG") then
      note = {
        text: "ダメー",
        color: "warning"
      }
    else
      note = {
        text: "おっけー",
        color: "good"
      }
    end

    notifier.post text: "", attachments: [note]
  end

end

.rspecにSlackFormatterの記述をたす

--color
--format d
--format SlackFormatter

実行するときはこんなかんじ

bundle exec rake spec:all -t -r ./lib/slack_formatter.rb

通知の内容を細かくアレコレしたいときは、slack_formatter.rbの中身をちゃんと書こう。

おしまい。

2016年読んだ10の漫画について書く

去年読んだマンガを振り返ってみる。

会社辞める時にもらったものが多い(電子書籍のマンガ売ってる職場だったのでね)。感謝感謝。

読んだけど、刺さらなかったものは触れてない。

岡崎に捧ぐ 1 (コミックス単行本)

岡崎に捧ぐ 1 (コミックス単行本)

会社辞める時にもらったもの。作者の人は世代的に近いのかな?と思った。調べてみたら、1985年ということで、1つ下なので、まさにジャスト。アラサーの人間にとっては懐かしく読めると思う。

懐かしい度:★★★

ブラッドハーレーの馬車 (Fx COMICS)

ブラッドハーレーの馬車 (Fx COMICS)

会社辞めるときにもらったもの。昔、アフタヌーン読んでたので、沙村広明に先入観があったのだけれど、やっぱり、暗く落ち込みたい時のマンガだった。社会人は日曜日に読まないほうがいい系。

落ちたいときに有用度:★★★

会社辞めるときにもらったもの。SFにカテゴライズされるんだろうけど、舞台設定がSFっぽいだけど、個人的にはぜんぜんSFじゃないと思う。人類がほどほどに戦える程度の侵略者がいる状態の、青春っぽい日常劇。文学っぽさある。異常世界での、日常劇ってのは、結構テーマとして多いので、そういうのが好きな人は好きだと思う。

破壊される世界を妄想しつつの日常度:★★★

魔女 第1集 (IKKI COMICS)

魔女 第1集 (IKKI COMICS)

会社辞めるときにもらったもの。やっぱり、五十嵐大介のマンガは難しい。馴染みのない田舎で、妙な郷土料理を食べた感じに似ている。

味わい方がわからない度:★★★

働かないふたり 9 (BUNCH COMICS)

働かないふたり 9 (BUNCH COMICS)

サザエさん症候群になったら読むべし。

日曜の夜に読みたい度:★★★

軍靴のバルツァー 9 (BUNCH COMICS)

軍靴のバルツァー 9 (BUNCH COMICS)

作者の人は、現実世界の技術革新をうまくフィクションに取り入れていて、まじすごい。

実際の歴史を調べたくなる度:★★★

キングダム実はあんまり好きじゃないんですが、あれよりリアリティが多少ある。あとキングダム好きって人にも勧めやすい。

鎌倉萌度:★★★

長く連載してしまって、伏線の風呂敷を広げてしまったマンガって、終わり方が難しいんだけど、これは最後のほうですごいがんばったと思う。いくつか気になるけど、それでも回収できたほうじゃないかなー。

伏線回収がんばりました度:★★★

中途半端な状態で終わらなくて本当にうれしい。今年一番うれしかったかも。

続いてくれてうれしい度:★★★

リアリティのあるマンガって、リアルに近づくと粗がかえって気になるんだけど(例えばマージナルなんとかとか)、しきい値超えるとエンターテイメントとして楽しめる。これは後者。

スナイパー中二度:★★★

10紹介するだけで大変だ。( ´ー`)フゥー...

2016年の振り返り

今年もお疲れ様でした。 チラ裏たる自分のブログで、2016年をつらつら振り返ってみたいと思います。

アウトプット

このブログ以外に書いたものは以下の感じです。いつか自分が興味を強く持てるテーマの本とか書いてみたいなぁ。

相変わらず体外的なアウトプットが質、量共に不足してますねー。先達を見習わねば。

仕事

特に退職エントリとかは書いてないですが、渋谷の会社を退職して八重洲の会社で働くようになりました。環境を変えると新しくいろいろ学ばないといけないなぁ、という当たり前のことを感じています。(この点は非常にポジティブに感じています)。

最初の転職の時は結構、崖から飛び降りる!ぐらいの感じがありましたが、今年の転職はそうでもなく、日本の狭い業界でスライドした感が。。。ただ、入ってみたら予想以上に若者が多かったので、サラリーマン10年選手の自分が出せるバリュー、ってのはどういうことなんだろうなぁというのを日々模索中です。

齢30を過ぎ、30代の身の振り方、40代の身の振り方をどうしたものかなーというのが、ここ最近の懸案だったりします。今のところ特に結論めいたものは無いんですけど。

今の仕事内容としては、成り行きなんですが、とあるサービスのSite Reliability Engineeringチームとして、結構なんでも屋っぽい仕事を今はしています。Java書いたり、Ruby書いたりという感じです。ちょっとインフラ屋時代に近い側面もあり懐かしさもあります。

プライベート

個人的なところで言えば、不健康な年だった、に尽きます。

人生初の入院(腸炎)であったり、ちょっとした風邪などなど。

来年は家庭の環境も激変しそうなので、自分が健康に過ごさないといけないなぁという必然性を感じています。今まで以上に、自分が元気でないといけないですね。

2017年に向けて

スキルとして伸ばしていきたいのは、数学であったり、英語であったり、プログラミング(ネイティブアプリ何か作りたいなー)であったりと、2016年に考えていたことと特に変わりません。

加えて、プライベートでもますますがんばる必要が出てきているので、健康に気をつけて日々を過ごしたいと思います(実は以前より酒量も減らしているんですよ)。

それでは皆さんも良いお年を〜

Site Reliability Engineering: How Google Runs Production Systems

Site Reliability Engineering: How Google Runs Production Systems

  • 作者: Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2016/04/16
  • メディア: ペーパーバック
  • この商品を含むブログを見る

Capistrano3を最低限の構成ではじめてみる

やりたいこと

  • Mac OS X前提
  • sshでログインできる環境で、capistranoのタスクファイルを分割して、パイプライン定義して呼び出したい。
  • 最低限の記述で書き始めたい。

install

$ gem install capistrano
$ cap -v
Capistrano Version: 3.6.1 (Rake Version: 10.4.2)

getting start

# ディレクトリつくる
mkdir sample
cd sample

# 初期ファイル生成する
cap install

# とりあえず使わないものを消す
rm config/deploy/*

全体像

.
├── Capfile
├── config
│   ├── deploy
│   │   ├── local.rb
│   │   └── recipes
│   │       ├── hello1.rb
│   │       └── pipeline.rb
│   └── deploy.rb
├── lib
│   └── capistrano
│       └── tasks
└── log

各タスク置き場のディレクトリつくる

mkdir config/deploy/recipes

deploy.rbをかく

config/deploy.rb

lock '3.6.1'
Dir['config/deploy/recipes/*.rb'].each { |plugin| load(plugin) }

local.rbかく(local用の設定ファイルつくる)

config/deploy/local.rb

set :user, ask('user-name', nil)
set :password, ask('user-password', nil)
server '127.0.0.1', port: 22, user: fetch(:user), password: fetch(:password), roles: %w{app}

pipeline.rbをかく(パイプライン制御用)

config/deploy/recipes/pipeline.rb

task :hello do
  after "hello", "hello1:echo1"
end

hello1.rbをかく(実際のタスク)

config/deploy/recipes/hello1.rb

namespace :hello1 do

  task :echo1 do
    on roles(:app) do
      execute 'echo "hello world"'
    end
  end

end

実行例

localhostsshでログインできる状態で。

$ cap local hello --trace

** Invoke local (first_time)
** Execute local
** Invoke load:defaults (first_time)
** Execute load:defaults
Please enter user-name ():
Please enter user-password ():
** Invoke hello (first_time)
** Execute hello
** Invoke hello1:echo1 (first_time)
** Execute hello1:echo1
00:00 hello1:echo1
      01 echo "hello world"
      01 hello world
    ✔ 01 xxx@127.0.0.1 0.272s

こんな感じ

その後の拡張のやり方

  • これから開発していくときは、環境が増えたら、local.rbのように、xxx.rbを配置すればよい。
  • hello1以外のタスクを定義をしたくなったら、hello1.rbのように、xxx.rbを配置すればよい。

おしまい。

踏み台経由のsshでsocks proxyをつくって、jmx接続して監視する話

やること

  • ローカルのMac上のVisualVMから、リモートのLinuxで動いているJVM(Javaアプリケーション)に接続する
  • sshは直接接続できなくて、踏み台経由

環境

ローカルMac OS version

sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G31

ローカルSSH version

 ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8

java version

java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

Javaアプリケーションの設定

Javaアプリケーションの起動シェルはこんなかんじ

#!/bin/sh

JVM_OPS="-server -Xms128M -Xmx128M \
-Dcom.sun.management.jmxremote.rmi.port=18080 \
-Djava.rmi.server.hostname=10.x.x.x \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.port=18080 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"

java ${JVM_OPS} -jar foo.jar >/dev/null 2>&1 &

exit 0

これをたたく。

sshでsocks proxyをつくる

ssh configはこんなかんじ

Host fumidai
  HostName 10.x.x.x
  Port 22
  IdentityFile ~/.ssh/foo.pem
  User user

Host target
  HostName 10.x.x.x
  Port 22
  IdentityFile ~/.ssh/foo.pem
  User user
  ProxyCommand ssh -F ~/.ssh/config -W %h:%p fumidai
  DynamicForward 10000

sshコマンド実行、proxyつくる

ssh -F ~/.ssh/config target

これでproxyがつくられる

VisualVM or JConsoleで接続する

VisualVM

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=10000 -J-DsocksNonProxyHosts=

VisualVMが起動したら、上の例だと、127.0.0.1:18080に対して、JMX接続を追加すればOK

JConsole

jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=10000 -J-DsocksNonProxyHosts=

ここまで至るの長かったわー

fire HD 8 (2016)が来てから1週間

f:id:shase428:20161001164529j:plain

古いiPadを長らく使っていたのですが、電子書籍のリーダーとして見たときにいくつか欠点があって、新しいタブレットを探していました。

iPadというか、iOSの思想的なところなんですが、やっぱり自炊した本、電子書籍書店で買った本なんかを読むときに、不便を感じます。

  • microSDなどの外部メディアが使用できること
  • ftpdなどを用意に立ち上げられること(自宅のLAN内で、PCからの直接転送をしたい)

これらの機能が欲しいなと思い、8インチクラスでいろいろ探していたんですが、ちょうどfire HDの新型が出るということで、世間のレビューも待たずに買うことにしました。

Primeじゃない定価で、16GBモデルを購入。

特に不満はないんですが、感想をちょっとだけ。

  • iPad,iPhoneの液晶に目が慣れたせいか、やっぱり、液晶は見劣りするが、値段相応
  • 解像度はまぁまぁ、本を読むのがメインだと気にならないレベル
  • fireOSのストアは、google playに比べれば、当然アプリは少ないんですが、ノンサポートでAPKを配ってるところもあるのであまり気にならず(例えば、KADOKAWA BookWalkerとか)

12,980で買える8インチタブレットしては上々ではないでしょうか。

Fire HD 8 タブレット 16GB、ブラック

Fire HD 8 タブレット 16GB、ブラック

Amazon Fire HD 8 (Newモデル) 用カバー ブラック

Amazon Fire HD 8 (Newモデル) 用カバー ブラック