chromebook(Acer C720) へ Kali Linux をインストールした、なかなか辛かった

結論

Croutonでインストールしようとしたが情報が古く苦労した
以下辿り着いた方法

sudo sh -e crouton -r kali-rolling -n kali -t xfce-desktop
# GUI
sudo startxfce4 -n kali
# CUI
sudo enter-chroot -n kali

詳細

※ローカルデータはすべて消える
1.chromebookをシャットダウンして、以下方法で起動する
([esc]+[→の右にある更新ボタン]+[電源ボタン])

2.OSの確認機能をオフにして、デベロッパーモードへ移行
([Ctl]+[D] にてデベロッパーモードへ)

3.Crouton (Chromium OS Universal Chroot Environment)のダウンロードとKali Linuxのインストール
最新のcroutonがおいてある https://goo.gl/fd3zc からダウンロード
[Ctl]+[Alt]+[T] でcroshにアクセスして以下コマンドを実行

shell
sudo sh -e ~/Downloads/crouton -r kali-rolling -n kali -t xfce-desktop
# GUI
sudo startxfce4 -n kali

ハマった理由

ディストリビューション指定が古く、デスクトップ環境の指定もxfceでは接続できなかったため

sudo sh -e crouton -r sana -n kali -t xfce
...
...
W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg
...
E: Failed getting release file http://http.kali.org/dists/sana/Release
sudo sh -e crouton -r kali-rolling -n kali -t xfce
sudo startxfce4 -n kali
...
(++) Log file: "/tmp/Xorg.crouton.1.log", Time: Mon Jan 30 01:08:56 2017
(++) Using config file: "/etc/X11/xorg-dummy.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
/usr/lib/xorg/Xorg: symbol lookup error: /usr/lib/xorg/modules/drivers/dummy_drv.so: undefined symbol: ChangeWindowProperty
/usr/bin/xinit: giving up
/usr/bin/xinit: unable to connect to X server: Connection refused
/usr/bin/xinit: server error
Unmounting /mnt/stateful_partition/crouton/chroots/kali...
Sending SIGTERM to processes under /mnt/stateful_partition/crouton/chroots/kali...

メモ

・デベロッパーモードでないとshellコマンドを利用できないらしい
・GUIでログインする場合には方法はいくつかある
(Xubuntuの場合) sudo startxfce4
(Kubuntuの場合) sudo startkde
(GNOMEの場合) sudo startgnome
(ubuntuの場合) sudo startunity
※unity target is only supported on Ubuntu
・croutonでダウンロードしたものは、以下に保存される
/mnt/stateful_partition/crouton/chroots
/usr/local/chroots はシンボリックリンク
・sudo sh -e crouton -u -n kali -t xfce
 おそらく-uはアップデートのためのオプション
・[Ctl]+[Alt]+[Shift]+[←] でKali Linuxからchromebookへ切替可能
・xubuntu をインストールする場合

sudo sh -e crouton -r trusty -t xfce-desktop
sudo startxfce4 -n trusty
※WARNING: xenial is an unsupported release.

参考URL

ChromebookにUbuntuをインストールする方法
dnschneid/crouton Kali
crouton作者のwiki
Kali Linux – HP Chromebook
Kali Linux公式ではUSBブート推奨なのかも
croutonで知っていて得をするかもしれないコマンド
ChromeOSのウィンドウ内でUbuntuを表示する方法 ―拡張機能「crouton integration」
kali-rolling install fails when attempting to download netsurf-gtk #2513

To recap: Note: Run steps 1-2 and steps 10-11 from chromeos shell (not crosh), Run steps 3+4 and 7-9 from the inside the chroot, Steps 5 and 6 are for working with the text editor nano.
1. sudo crouton -r kali-rolling -n kali -t xiwi
2. sudo enter-chroot -n kali
3. cd /etc/apt
4. sudo nano sources.list
5. add the following line: deb http://ftp.us.debian.org/debian jessie main
6. save (ctrl + o) and exit (ctrl + x) nano
7. sudo apt-get update
8. sudo apt-get install netsurf-gtk
9. exit
10. sudo crouton -u -n kali -t xfce
11. sudo start xfce4

ansibleベストプラクティスについてググってみた

ansibleベストプラクティスについてググってみた。そのまとめ。

参考-URL

公式のBestPractice

Ansible Tutorial

ベストプラクティスからはじめるAnsible

Ansible 初心者なら、まずは Ansible Galaxy から始めてみよう

実践!Ansibleベストプラクティス(前編)

参考-コマンド

# git clone https://github.com/yteraoka/ansible-tutorial.git
# cd ansible-tutorial
# git checkout playbook
# ansible-playbook --list-tasks -i test-servers site.yml
# git clone https://github.com/yukihirai0505/ansible-best-practice-hands-on
# cd ansible-best-practice-hands-on/httpdStore
# ansible all -m ping
# ansible-playbook -i stage site.yml

azure-cli 使ってみた

Azure CLI のインストールがわかりやすかった。
この順番通りに実施した。

インストール

# apt-get install nodejs nodejs-legacy
# nodejs --version
v4.6.1
# curl -L https://npmjs.org/install.sh | sh
# npm --version
4.0.5
# npm install -g azure-cli
# azure --version
0.10.8 (node: 4.6.1)
# azure help
...
Select y to enable data collection :(y/n)n
...
info:    Executing command help
info:             _    _____   _ ___ ___
info:            /_\  |_  / | | | _ \ __|
info:      _ ___/ _ \__/ /| |_| |   / _|___ _ _
info:    (___  /_/ \_\/___|\___/|_|_\___| _____)
info:       (_______ _ _)         _ ______ _)_ _
info:              (______________ _ )   (___ _ _)
info:
info:    Microsoft Azure: Microsoft's Cloud Platform

### アップデート ###
# npm update -g azure-cli

予測変換できるようにする

# lv /root/azure.completion.sh
# echo 'source ~/azure.completion.sh' >> ~/.bash_profile

ログインする

# azure login
...
info:    To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code XXXXXX to authenticate.
### ブラウザで上記URLにアクセスしてコードを入力するとログインされる ###

# azure account list
info:    Executing command account list
data:    Name                                           Id                                    Current  State
data:    ---------------------------------------------  ------------------------------------  -------  -------
data:    BizSpark-2018年4月まで-月額上限1万5千円相当×36ヶ月(最大54万円相当)  xxx-xxx-xxx-xxx  true     Enabled
info:    account list command OK

仮想マシンを起動する

# azure vm list kali
...
data:    ResourceGroupName  Name  ProvisioningState  PowerState      Location  Size
data:    -----------------  ----  -----------------  --------------  --------  ---------------
data:    kali               kali  Succeeded          VM deallocated  westus    Standard_DS1_v2

# azure vm show kali kali
...仮想マシンの詳細が表示される...
data:    Storage Profile:
data:      Image reference:
data:        Publisher                   :kali-linux
data:        Offer                       :kali-linux
data:        Sku                         :kali
data:        Version                     :latest

# azure vm start kali kali
...
info:    vm start command OK

### シャットダウンする(このままだと課金が発生するためdeallocateで停止する) ###
# azure vm stop kali kali
...
info:    vm stop command OK

# azure vm deallocate kali kali
...
info:    vm deallocate command OK

アカウント情報を削除する

# azure account clear

Azure 仮想マシンのパスワードを忘れた場合

ポータルから[パスワードのリセット]が可能。

すぐに結果を確認すると

しばらくすると完了する

※既存のユーザのパスワードを変更するよりも、新しくユーザを作成して既存ユーザのパスワードを変更したほうがよさそう。

参考

第4回 仮想マシンの基礎知識 (2) ~仮想マシンの管理、設定、リモート接続編~ (武田正樹)

osc2016-tokyo/fall に参加した

osc2016-tokyo/fall に参加した
その時のメモ

Debian updates – 岩松 信洋さん

・LinuxカーネルでなくFreeBSDやGNU/Hurdのカーネルを利用したものも提供
・63カ国、1000名のDebian公式開発者
・debian9は2017年Q2orQ3予定

Debian updates

・2016年2月からどういう変化があったか?をポイントに説明

2016/4/2 2016年度 Debian Project Leader 決定
2016/5/15 ZFSがcontribセクションに追加
2016/8/16 Debian23歳に

Debian7LTSは 2018/5/31まで

Debian9について

・Debian9ではサポートがi686以降に変更
 古いx86のCPUはサポートされないかも
・Debugシンボル用パッケージ用新規スイート提供開始(debian9をapt-lineに入れると利用可能)
 パッケージごとにdebugシンボルが入るかどうか決まっていたが、今後はすべてのパッケージにdebugシンボルが入る予定らしい
・Linuxカーネル4.10
・PHP7.0.12
・MariaDB 10.0.28
・OpenSSL 1.1.0

今後について

2016/11/5 transitions freeze ライブラリの変更禁止
2017/1/5 soft freeze パッケージのアップデート禁止
2017/2/5 full freeze

その他

2016/12/10 debian miniconf in Japan

Fluentd + Zabbix + Grafana で監視システムを構築してみよう – 盛 宣陽さん(SRA OSS, Inc. 日本支社)

Grafanaとは

Zabbix elastic influxDB CloudWatch などツールの使い分けが複雑に
→Grafana(グラフ作成ツール)で一箇所で見られるようにできるかも 
・フロントはJavaScript、バックエンドはGoで書かれている
・2016/5/11 メジャーバージョン3.0 リリース(4.0ではslackやメールでの通知機能が追加される予定)
debianへのインストールも簡単にできそう

GrafanaとZabbix連携

GrafanaにZabbixユーザを登録して閲覧できるように
(GrafanaのデータソースにZabbixを登録)

Grafana利用時のメリット

・クラウドとオンプレミス、2つの監視機構がある場合に、1箇所で閲覧できる
・スナップショット機能を利用して、過去のデータを保持できる(zabbixではデータ保持期間を過ぎると削除される)
・Annotation機能を利用して複数グラフを1箇所にまとめられる

はてなのサーバ/インフラを支える技術 ~ 2016新卒編 ~ – 佐々木 健人さん・古川 雅大さん

広告配信について

レイテンシ:リクエスト処理にかかる時間
スループット:単位時間あたりのリクエスト処理能力

50 msec or die(広告業界基準)
→負荷試験ツールを導入(Gatling)
→ボトルネックの把握(top,perf,pt-query-digest,NYTProf(perl)などのプロファイラを利用)

高速かつ冗長的なネットワーク構成にするために

ロール間は基本的にLBを通す
・LinuxLVS + Keepalived を使用
→NAT方式(戻りパケットが集中するため捌けるコネクション数が少ない、IPヘッダの書き換えで遅い)
 DR方式(MACアドレスを書き換えるため高速、ただしARPを利用しているためネットワーク越えが難しい)
 TUN方式(あたらしいIPヘッダを付与して、ネットワーク越えができるようにしている)
 →はてなでは、TUN方式が多い(他での使用例はあまり聞いたことがない)

基盤技術の選択

必要な要件、インフラ事情は各社異なるので適材適所、無理し過ぎない選択を心がけるべし
(周りや流行りに振り回され過ぎないこと)

参考

https://speakerdeck.com/yuukit/linux-network-performance-improvement-at-hatena

【パネルディスカッション】今こそ改めて考える!OSSによるクラウド運用の勘所

※ほぼすべてさくらインターネットさんがおっしゃっていたこと。

オープンソースの監視ツールを導入してよかったこと

HobbitやXymonをZabbixに置き換えている
自動化がしやすい(障害検知したらアクションスクリプトを実行するなど)
日本語情報が多くある

うまくいっていること、うまくいかなかったこと

置き換えにあたり、1サーバあたり3000台監視していたが性能問題が発生した
→同じ問題が起こっている場所があり、その場合はDBチューニングやZabbixであればHouseKeeperでのチューニングを実施

正解がない運用で、何を正解だと考えて運用しているか

データセンター事業者としては「ハードが壊れた時だけ人が動く運用が正解」かと。
共有サーバでの特定ユーザがリソースを使いまくるような行為は、CPU監視などの挙動で判断できる。
不要なアラートを減らし、本当の障害が起きた時にアラートをあげることが正解だと考えている。

すべて監視サーバに役割を多くもたせ過ぎない。例えばサービスごとにZabbixを準備するなど分散できるようにしておく。

障害時チケット管理と、早く対応する工夫

・Redmineを利用。
・メールで対応。一次対応者が対応できる範囲を拡げる。

展示ブース

株式会社サードウェアさん

drbdmanage:drbd9で追加された機能。複数ノードの管理を簡単にしてくれるツールらしい。
SDSに向かっている印象を受けた。

サイトブリッジ株式会社さん

自治体用CMSを作成している。
走りは島根CMS。徳島県でもCMSを利用したいということでJoururiを制作。
承認システムなど通常のCMSとは異なる仕様が多々ある。
Joururiから派生して、ZOMEKIが作成されている。

日本Piwikユーザー会さん

リアルタイムアクセス解析プログラム。
月1000万PVを超えるようになった場合、解析サーバを分割したほうがよいとのこと。
複数サイトからのログを集約することも可能。

第3回 Machine Learning 15minutes! に参加した

第3回 Machine Learning 15minutes!に参加した

-Googleの機械学習プロダクト グーグル株式会社- 佐藤 一憲さん

A Neural Network Playground
ニューラルネットワークを理解するためのツール

Googleでの利用シーン

・グーグル検索
 昨年からディープラーニング(RankBrain)ベースに
・Googleフォトはディープラーニングで分類分け
・英語版Gmailについてはメール返信をディープラーニングを利用して予測変換
 10%は予測変換内容が利用されている
・ディープラーニングを利用して、データセンター電力効率が15%オフに

TensorFlow

・Googleサービスで実際に利用されている(日々開発されている)
・分散環境を前提として設計されている
・学習結果をオフラインやスマートデバイスでも利用可能
 (他のフレームワークよりも優れている点)
・現状いかに分散させるかで各ベンダがしのぎを削っている

誰でも利用できるように

専門家でない人たちが利用している
例えば、
・キュウリ仕分け
・からあげロボット

より最適化するために

ハード面についても強化している
→CloudMLでその威力を実感できるはず
→解析に何日かかかるようではダメ
・Jupiterネットワーク
 サーバ間ネットワークのレイテンシを下げるために自社で開発
・TensorProcessingUnit
 CPUでもなくGPUでもない
 10倍の電力性能比
 →利用して1年以上経っている枯れた技術

-IBM Watsonの機械学習サービスとWatson Knowledge Studio- 日本アイ・ビー・エム株式会社 平山 毅さん

IBM Watoson→クラウド提供、エンタープライズを意識(プロダクトの枠組み)
コグニティブコンピューティング;環境からすべて用意(軍事関連もあるためオンプレミスということも)

TensorFlow→オープンソース提供 (誰でも)使えるように

IBM Watoson Knowledge Studio
業界や分野ごとの知識に基づいて、
各分野の言葉の使われ方の微妙な違いまでWatsonに教えることを可能とするツール

-Dive into Deep Learning Framework- 株式会社ABEJA 緒方 貴紀

株式会社ABEJA IoT, BigData, AIを扱っている会社
4年間ディープラーニングに従事している。その際に利用したフレームワークについて個人的感想を

TensorFlow

・行列計算ライブラリ(DeepLearningだけでなくさまざまな用途あり)
・MLプラットフォームを提供開始するので、GPUマシンが必要なくなるかも
・仕組みが複雑のため勉強する必要がある
・グーグルのプラットフォームで最適化されているため、環境によっては処理が重い

K ケラス

・シンプルに直感的に利用できる
・TensoleFlowなどをバックエンドとして利用している
・Multi-GPU非対応
・とりあえず使いたい人向け

Chainer

・ネットワーク記載時の柔軟性が高い
・内部がどうなっているかわかりやすい

-対話botの技術- 株式会社ウサギィ 五木田 和也さん

自然な感じで雑談できるためにLSTMを利用している
 LSTM→Recurrent Neural Network を改良し、長期の依存関係を扱えるようにしている

httpoxy

概要

HTTPアクセス時に”proxy:”ヘッダをつけると
サーバ側で HTTP_PROXY として認識される(ヘッダのproxyが大文字に変換され、HTTP_が付与される)
CGIアプリケーションはこの値をHTTPプロキシの値として認識し
例えばPHPは外部接続時にHTTP_PROXYを利用して通信する

影響

サーバから外部にHTTP通信時にプロキシを経由させることができる
つまり通信内容を傍受可能となる
2016-07-19_220225
Mitigating the HTTPoxy Vulnerability with NGINX

対策

・リクエストに含まれる Proxy ヘッダを無効にする
・CGI において、環境変数 HTTP_PROXY を使用しない
・ファイアウォールなどを用いて Web サーバからの HTTP アウトバウンド通信を必要最小限に制限する
CGI等を利用するWebサーバの脆弱性に関する注意喚起 – JPCERT/CC

nginx対策方法

リクエストに含まれるProxyヘッダを無効にする対応は
複数サイト運用だと複数のファイル変更が必要となり、キツイためCGIにてHTTP_PROXYを使用しないことで対応

### 設定追加してreloadする ###
root@debian9:/etc/nginx# vi fastcgi_params
=====
fastcgi_param HTTP_PROXY "";
=====
root@debian9:/etc/nginx# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@debian9:/etc/nginx# /etc/init.d/nginx reload

apache対策方法

検証環境が手元にないが、以下でリクエストに含まれるProxyヘッダを無効にすることが可能とのこと

RequestHeader unset Proxy

確認方法

PHPに関するHTTPOXY脆弱性の問題と対応方法より

curl -H 'Proxy: 127.0.0.1:12345' "http://localhost"

でアクセス。PHP側は

var_dump($_SERVER['HTTP_PROXY']);
putenv('HTTP_PROXY=');
var_dump(getenv('HTTP_PROXY'));
exit;

その他

主なディストリビューションの対応方法
httpoxy : CGI/言語などを利用したHTTP_PROXY書き換えの脆弱性(CVE-2016-5387 etc.)

Ethereumを使ってみた

Ethereumとは

・2015-7-30リリース
・Ethereum(パブリック型ブロックチェーン)
・マイクロソフトが開発環境を提供しているらしい
・スマートコントラクト・分散型アプリケーション(DApps)の構築プラットフォーム
・派生したプロジェクトにEris、HydraChain(エスタブリッシュ型ブロックチェーン)

ブロックチェーン情報

・ETHの残高情報等がブロックチェーンに直接記録されるアカウントがベースとなったシステム
 2種類のアカウントがある
 ・従来のビットコイン等の仮想通貨のアドレスと同様のアカウント
 ・「コントラクトアカウント(Contract Account)」と呼ばれるプログラムコードによって
  管理されるスマートコントラクト実行用のアカウント

インストール

debianで試そうとしたが、サポート外とのこと(公式フォーラムより)

root@ubuntu1404:/home/shimizu# bash <(curl -L https://install-geth.ethereum.org)
...

root@ubuntu1404:/home/shimizu# geth version
Geth
Version: 1.4.10-stable
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.5.1
OS: linux
GOPATH=
GOROOT=/usr/lib/go

テスト環境で採掘する

パーミッションド型ブロックチェーンを試せる(Ehterの挙動調査や個人的な作業に向いている)
ただしそこで得たEtherはパブリック型ブロックチェーン(Frontier)では利用できない

root@ubuntu1404:/home/shimizu# mkdir eth_data
root@ubuntu1404:/home/shimizu# geth --networkid "10" --datadir "/home/shimizu/eth_data" --olympic console
...
> personal.newAccount("shimizu")
"0x2e7f96d3251027d3b4e2d90be4f9a320e7a28f07"
> personal.newAccount("shimizu02")
"0x8e9b51319dc468e8c1ea55737ba3192f40693103"
> eth.accounts
["0x2e7f96d3251027d3b4e2d90be4f9a320e7a28f07", "0x8e9b51319dc468e8c1ea55737ba3192f40693103"]
> miner.start()
I0719 00:47:10.318491 miner/miner.go:119] Starting mining operation (CPU=1 TOT=2)
I0719 00:47:10.318831 miner/worker.go:573] commit new work on block 1 with 0 txs & 0 uncles. Took 204.305µs
true
> I0719 00:47:10.319500 eth/backend.go:454] Automatic pregeneration of ethash DAG ON (ethash dir: /root/.ethash)
I0719 00:47:10.319637 ethash.go:259] Generating DAG for epoch 0 (size 1073739904) (0000000000000000000000000000000000000000000000000000000000000000)
I0719 00:47:10.319935 eth/backend.go:461] checking DAG (ethash dir: /root/.ethash)
I0719 00:47:12.251590 ethash.go:291] Generating DAG: 0%
I0719 00:47:14.766994 ethash.go:291] Generating DAG: 1%
I0719 00:47:17.135879 ethash.go:291] Generating DAG: 2%
...

miner.stop()

### ブロックチェーンの長さ ###
> eth.blockNumber
937

### etherの持ち高確認 ###
> eth.getBalance("0x2e7f96d3251027d3b4e2d90be4f9a320e7a28f07")
1.40765625e+21

Frontierに接続してみる

アカウントの削除方法がわからなかったため、新しくディレクトリを作成して試してみた

root@ubuntu1404:/home/shimizu# mkdir eth_data_frontier
root@ubuntu1404:/home/shimizu# geth --datadir "/home/shimizu/eth_data_frontier"
...
I0719 02:01:41.677036 core/blockchain.go:963] imported 1906 block(s) (0 queued 0 ignored) ...
...

参考URL

Ethereum イーサリアム
Gethをインストールする
Ethereumをインストールしてみた。

cronをJenkins+Slackに置き換える

ポイントだけメモ

サーバにてsudo権限追加

root@debian9:/home/shimizu# visudo
===
jenkins ALL=(ALL) NOPASSWD:ALL
===

Jenkinsにて[Slack Notification Plugin]をインストール
2016-07-04_014731
※画像はインストール済のものを載せている

SlackにてJenkins通知用チャンネル作成
2016-07-04_014829

SlackにてJenkins CIをインストール
https://shimizur.slack.com/apps
2016-07-04_015013

Jenkinsにてシェルスクリプトを実行するように設定
Jenkinsの通知設定にてJenkins CIインストール時に表示されるtokenをJenkinsに入力
2016-07-04_015144
2016-07-04_015227

Jenkins動作するとSlackに通知されるように
2016-07-04_020012