とりあえずブログ

普通のサラリーマンの雑多なブログ

テキストエディタAtomで『tunneling socket could not be established, statusCode=407』エラー

Atomを使用したくてインストールしたのですが、Proxy環境でパッケージをインストール使用とすると下記エラーメッセージが出力され、パッケージをインストールすることができません。

Searching for “japanese” failed.Hide output…
tunneling socket could not be established, statusCode=407

日本語化のパッケージをインストールしようとしたのですが、上記エラーでインストールができませでした。。。

なにやら調べて見るとProxy環境ではProxyの設定が必要となるようなので、下記手順を実施しました。

  1. C:\Users(ユーザ名).atom.apmrcを作成する。 エクスプローラーでドットから始まるファイルを作ることができませんので、コマンドプロンプトから
type nul > .apmrc

といった感じでファイルを作成します。

  1. 1で作成したファイルに下記を書き込む。
http-proxy = http://(ユーザ名):(Password)@(Proxyサーバアドレス):(Port番号)
https-proxy = http://(ユーザ名):(Password)@(Proxyサーバアドレス):(Port番号)
strict-ssl = true

これでProxy環境の設定が整ったので、再度パッケージをインストールしようとしましたが、上記エラーメッセージが出力されてしまいインストールすることができませんでした。

ちゃんとProxy環境が設定されているか確認するため、Atomapmコマンドを使用して設定状況を確認したところ、@マーク(アットマーク)がパスワードに入っている場合、文字がエンコードされてしまい、正しく認識されていませんでした。

設定確認コマンド

apm config list

ちなみにコマンドのありかは、C:\Users(ユーザ名):\AppData\Local\atom\binになります。

コマンド実行結果

; userconfig C:\Users\(ユーザ名)\.atom\.apmrc
http-proxy = "http://(ユーザ名):*@*******@(Proxyサーバアドレス):(Port番号)"
https-proxy = "http://(ユーザ名):*%40*******@(Proxyサーバアドレス):(Port番号)"
strict-ssl = false

そこでパスワードを@マークが入っていないものに変更し再度パッケージをインストールをしようとしたところ、やっぱり同じエラーでパッケージをインストールすることができませんでした。

この事象はどうやらAtomのバグのようで、Proxy設定を正しくしていてもGUIでパッケージをインストールしようとすると、発生することがあるようなので、もうapmコマンドで対象のパッケージのインストールを試してみました。

github.com

日本語化パッケージのインストールコマンド例

C:\Users\(ユーザ名)\AppData\Local\atom\bin>apm install japanese-menu
Installing japanese-menu to C:\Users\(ユーザ名)\.atom\packages done

コマンドでなんとかパッケージをインストールすることができました。

Atomを使用していて同じエラーの方がいらっしゃたら、コマンドでのパッケージインストールを試してみてください。

関連記事です。

saito.hatenadiary.com

【レビュー】マウスが欲しかったので『Magic Mouse 2』を買いました

普段MacBook Proを使用しているのですが、これまでマウスなしで利用していました。

いろいろPCを操作してく上で、やっぱりマウスないと不便なので、良いマウスないかなーと思って調べてみると、やっぱり『Magic Mouse 2』の評価が高かったので、購入しました。

f:id:tkm03:20180523192122j:plain

箱を開けるとこんな感じです。

f:id:tkm03:20180523192349j:plain 輝いてますねぇ。

MacBook ProにUSBで繋ぐと自動的にペアリングするということなので、早速接続して各種設定を行ってみました。

設定は、「システム環境設定」−「マウス」で設定できます。

設定画面はこんな感じです。

f:id:tkm03:20180523194831p:plain

とりあえず、『Magic Mouse 2』の機能をフルで使用したいので、すべてにチェック入れます。

あと、軌跡の速さがデフォルトだとまあまあ遅いので、MAXにします。

「その他のジェスチャ」もすべてにチェック入れます。

f:id:tkm03:20180523194939p:plain

早速使ってみたところ、超便利!

画面の縦スクロールも指1本で縦になでるだけで、スムーズにできるし、2本指でダブルタップするとアプリケーションの切り替えも簡単にできるし、かなり便利です!

個人的には、軌跡の速さがもっと速い方が良かったですが、それでもそんなにストレスなく使えます。

電源についても電池式ではなくて、充電式なところもかなり良いです。

電池がなくなったら、『Magic Mouse 2』の裏側にライトニングケーブルを刺せば充電できるので、かなり便利です。

f:id:tkm03:20180523193615j:plain

2時間充電で約1ヶ月使用できるとのことなので、かなり良いです。 これで電池を買う手間が省けます。

Magic Mouse 2』のジェスチャに慣れるにはしばらく時間がかかりそうですが、使い込んで早く慣れたいと思います。

8,800円と結構高いですが、今の所結構満足しています。

気になるのはバッテリーがどれくらいで劣化するのかが、気になるところなので、今後追記していきたいと思います。

rTorrentの脆弱性を狙った攻撃をキャッチ

最近DASAN Network Solutionsのホームルーター脆弱性WebLogic脆弱性を狙った攻撃ばかりで、つまんないなーと思いながらハニーポットのログを見ていたら、見慣れないログを見かけたので、ご紹介します。

そのログはこんな感じのログです。

POST /RPC2 HTTP/1.1
Content-Length: 107
Content-Type: text/xml
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0

<?xml version='1.0'?>
<methodCall>
<methodName>download_list</methodName>
<params>
</params>
</methodCall>

これは、rTorrentというBitTorrentクライアントのソフトウェアを狙った攻撃になります。

そもそもBitTorrentとは

BitTorrent(ビットトレント)は、ブラム・コーエンによって開発された、Peer to Peerを用いたファイル転送用プロトコル及びその通信を行うソフトウェアである。

BitTorrent - Wikipedia

ということで、P2Pを利用したファイル転送ソフトで、僕は初めて知りました。 どんな用途で使用されているのかは今度調べたいと思います。

rTorrentの中でもHTTPを使用して、XMLによるRPCプロトコルを許可している場合に上記コードにより攻撃を受けてしまうそうです。

XML-RPC通信を許可しているrTorrentの場合、攻撃者は上記のリクエストを投げると、下記のようなダウンロードリストのハッシュを200で受け取ります。

f:id:tkm03:20180521230027p:plain (画像印象:rTorrent Client Exploited In The Wild To Deploy Monero Crypto-Miner

その後、別のPOSTリクエストでマイン二ング用のツールを配置するようなリクエストを投げてくるそうです。

f:id:tkm03:20180521230206p:plain (画像印象:rTorrent Client Exploited In The Wild To Deploy Monero Crypto-Miner

こんな簡単にマイニング用のツールを配置できちゃうなんて怖い。。。

ある攻撃者はこの攻撃で3,900ドル(約43万円)も稼いでいるとのことで、すげぇ。。。

参考サイト f5.com

Linuxのタスクスケジューラーの切り替えを覗いてみた(SystemTap)

Linuxカーネスソースを読む環境は準備できたのですが、どこから手をつけたら良いか分からないので、カーネルの動きを確認できるSystemTapという機能を使用して、遊んでみようと思いました。

まずはLinuxカーネルのタスクスケジューラ機能がどのようにタスクを切り替えているのかsched_switch.stpというスクリプトを使用して覗いてみようと思います。

sched_switch.stpスクリプトはこちらのサイトからダウンロードします。

SystemTap

PCにダウンロードして、サーバにアップロードするのはめんどうなので、wgetコマンドで適当なディレクトリに配置します。

# wget http://sourceware.org/systemtap/examples/profiling/sched_switch.stp

そして下記コマンドを実行します。

# stap ./sched_switch.stp

すると下記のログが出力されます。

f:id:tkm03:20180519200723p:plain

各カラムの説明をすると、

1列目:プロセス名 2列目:CPU識別子 3列目:実行時間 4列目:プロセスID 5列目:優先度

といった情報を確認することができます。

僕のサーバはCPUを1コアしか積んでいないので、CPU識別子が全て0となっていますが、複数コアがある場合はこちらの数が増えます。

ログを見ると、物凄い短い時間でプロセスを切り替えていることが分かります。

もしタスクの切り替えが上手くいっておらず、性能がでないという状況になった場合は、上記のsched_switch.stpスクリプトを使用してどのプロセスがボトルネックになっているか分かるかと思います。

他にもSystemTapのサイトではおもしろそうなスクリプトがたくさんあるので、遊び倒したいと思います。

f:id:tkm03:20180520170944p:plain

Linuxカーネル・ソースを読むための準備した

前回の続きです。

saito.hatenadiary.com

今回はカーネル・ソースを実際に読めるようなところまでの手順をご紹介したいと思います。

SRPMファイルのダウンロード

普通状態であれば、OSにはソースコードは付いてこないので、SRPMファイルというファイルをダウンロードして、インストールする必要があります。

まずは適切なバージョンのSRPMファイルをwget等でダウンロードします。

[root@localhost tmp]# wget http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/source/SRPMS/k/kernel-3.11.10-301.fc20.src.rpm
--2018-05-16 12:55:14--  http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/source/SRPMS/k/kernel-3.11.10-301.fc20.src.rpm
Resolving archives.fedoraproject.org (archives.fedoraproject.org)... 209.132.181.25, 209.132.181.23, 209.132.181.24
Connecting to archives.fedoraproject.org (archives.fedoraproject.org)|209.132.181.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 75668415 (72M) [application/x-rpm]
Saving to: ‘kernel-3.11.10-301.fc20.src.rpm’

100%[======================================>] 75,668,415  1.39MB/s   in 60s    

2018-05-16 12:56:16 (1.19 MB/s) - ‘kernel-3.11.10-301.fc20.src.rpm’ saved [75668415/75668415]

SRPMインストール

続いてrpmコマンドを使用して、インストールします。

[root@localhost tmp]# rpm -ivh kernel-3.11.10-301.fc20.src.rpm 
warning: kernel-3.11.10-301.fc20.src.rpm: Header V3 RSA/SHA256 Signature, key ID 246110c1: NOKEY
Updating / installing...
   1:kernel-3.11.10-301.fc20          ################################# [100%]

カーネル・ソースの展開

インストールが終わったら、~/rpmbuild/SPECS/にkernel.specが作成されます。

そのままではカーネルソースコードは、まだ展開されていない状態になります。

ので、rpmbuildコマンドを使用して展開する必要があります。

[root@localhost tmp]# cd ~/rpmbuild/SPECS/
[root@localhost SPECS]# ls
kernel.spec
[root@localhost SPECS]# rpmbuild -bp kernel.spec 
-bash: rpmbuild: command not found

んっ!?

コマンドが見つからない!?

どうやらrpmbuildコマンドが導入されていないようでしたので、インストールします。

[root@localhost SPECS]# 
[root@localhost SPECS]# yum install rpm-build
Dependency Updated:
  elfutils-libelf.x86_64 0:0.161-6.fc20  rpm-build-libs.x86_64 0:4.11.3-3.fc20 
  rpm-libs.x86_64 0:4.11.3-3.fc20        rpm-python.x86_64 0:4.11.3-3.fc20     

Complete!

これで実行できるので、コマンドを実行します。

[root@localhost SPECS]# rpmbuild -bp kernel.spec 
warning: line 517: Invalid version (double separator '-'): elfutils-0.153-1: BuildRequires: rpm-build >= 4.9.0-1, elfutils >= elfutils-0.153-1
error: Failed build dependencies:
    m4 is needed by kernel-3.11.10-301.fc20.x86_64
    gcc >= 3.4.2 is needed by kernel-3.11.10-301.fc20.x86_64
    hmaccalc is needed by kernel-3.11.10-301.fc20.x86_64
    bc is needed by kernel-3.11.10-301.fc20.x86_64
    xmlto is needed by kernel-3.11.10-301.fc20.x86_64
    asciidoc is needed by kernel-3.11.10-301.fc20.x86_64
    elfutils-devel is needed by kernel-3.11.10-301.fc20.x86_64
    zlib-devel is needed by kernel-3.11.10-301.fc20.x86_64
    binutils-devel is needed by kernel-3.11.10-301.fc20.x86_64
    newt-devel is needed by kernel-3.11.10-301.fc20.x86_64
    python-devel is needed by kernel-3.11.10-301.fc20.x86_64
    perl(ExtUtils::Embed) is needed by kernel-3.11.10-301.fc20.x86_64
    bison is needed by kernel-3.11.10-301.fc20.x86_64
    audit-libs-devel is needed by kernel-3.11.10-301.fc20.x86_64
    pciutils-devel is needed by kernel-3.11.10-301.fc20.x86_64
    pesign >= 0.10-4 is needed by kernel-3.11.10-301.fc20.x86_64

んっ!?

どうやら必要なパッケージがあるようなので、それぞれ表示されているパッケージをyumコマンドでインストールしていきます。

インストール完了後の確認

rpmbuild コマンドでのインストールが完了すると、~/rpmbuild/BUILD/kernel-3.11.fc20/linux-3.11.10-301.fc20.x86_64/配下にソースコードが作成されていることがわかります。

[root@localhost SPECS]# cd ~/rpmbuild/BUILD/kernel-3.11.fc20/linux-3.11.10-301.fc20.x86_64/
[root@localhost linux-3.11.10-301.fc20.x86_64]# ls
arch                      config-powerpc64        fs           REPORTING-BUGS
block                     config-powerpc64p7      include      samples
config-arm64              config-powerpc-generic  init         scripts
config-arm-generic        configs                 ipc          security
config-armv7              config-s390x            Kbuild       sound
config-armv7-generic      config-x86-32-generic   Kconfig      temp-arm64
config-armv7-lpae         config-x86_64-generic   kernel       temp-armv7
config-debug              config-x86-generic      lib          temp-armv7-lpae
config-generic            COPYING                 MAINTAINERS  temp-x86-32
config-i686-PAE           CREDITS                 Makefile     temp-x86-64
config-local              crypto                  merge.pl     tools
config-nodebug            Documentation           mm           usr
config-powerpc32-generic  drivers                 net          virt
config-powerpc32-smp      firmware                README

Makefileの冒頭部分を確認するとちゃんと想定したバージョンのカーネルソースコードであることがわかります。

[root@localhost linux-3.11.10-301.fc20.x86_64]# head Makefile 
VERSION = 3
PATCHLEVEL = 11
SUBLEVEL = 10
EXTRAVERSION =
NAME = Linux for Workgroups

# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
# More info can be located in ./README
# Comments in this file are targeted only to the developer, do not

このままでもソースコードの閲覧はできるのですが、このままだと閲覧しにくいので、タグ・ジャンプ機能を使用できるようにするため、下記コマンドを実行して、タグファイルを作成します。

find `pwd` -type f -name "*.[ch]" -o -name "*.[sS]" | sed -e 's/^/"/' -e 's/$/"/' | xargs /usr/bin/ctags -a

こうすることで、関数の呼び出し元を閲覧しやすくなります。

例えば、

vim -t printk

とすると、一気に/kernel/printk/printk.cまでジャンプすることができます。

これでカーネルソースコードを読む準備ができたので、せっせと読んでいきたいのですが、量が多すぎて、どこから手をつけようかと迷っています。笑

Vagrantでカーネル・ソースを読むための環境を整える

Linuxカーネル・ソースを読みたくて、その環境をどこかで構築したいと思っていたのですが、AWSだと料金がかかるので、Vagrantを使ってサクッと環境構築してみました。

Vagrantは以前から利用しているのですが、しばらく使用しないでいるとコマンドを忘れてしまうので、備忘になります。

1. Boxを取得

まずは下記コマンドでBoxという仮想マシンのテンプレートファイルを取得します。

vagrant box add <box_name> <box_url>

今回はFedoraを使用したかったので、下記コマンドをたたきました。

vagrant box add fedora64 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_fedora-20_chef-provisionerless.box

Boxはこちらのサイトを参考に選びました。 A list of base boxes for Vagrant - Vagrantbox.es

2. 仮想マシン用のディレクトリ作成

次に仮想マシン用のディレクトリを作成します。

mkdir <directory_name>
cd <directory_name>

3. 仮想マシン初期化

下記コマンドを使用して仮想マシンを初期化します。

vagrant init <box_name> 

今回はBox名にfedora64という名前をつけたので、下記コマンドを実行します。

vagrant init fedora64

4. 仮想マシンを起動&接続

初期化ができたら、起動してみます。

起動は下記コマンドでサクッとできます。

vagrant up

5. 仮想マシンへの接続

起動が完了したら、仮想マシンへの接続は下記コマンドを実行します。

vagrant ssh

これで一応仮想マシンが立ち上がり、ログインまでできました。

今後はこの環境を使用してカーネル・ソースを読んでいきたいと思います。

その他のコマンド

仮想マシンの状態確認

vagrant status

仮想マシンの停止

vagrant halt 

仮想マシンの再起動

vagrant reload

仮想マシンの削除

vagrant destroy

【読書メモ】『はじめてのパターン認識』で挫折したところ

機会学習の勉強会やブログなどで、よく紹介されている『はじめてのパターン認識』を読んでみたのですが、僕には3000年くらい早かったらしく挫折したので、どんなところでつまずいたのか備忘のため、残しておきたいと思います。

はじめてのパターン認識

はじめてのパターン認識

数学の記号が難しい

僕は文系ということもあって、数学2B程度の知識しか持っていないのですが、この本では行列がたくさん出てきて、行列をあまり扱ったことがない僕にとっては、かなり難易度が高かったです。

また、見慣れない記号がたくさん出てきて、数式の意味が分からないところが多かったです。

自分の数学力のなさに凹みました。。。

このあたりは機会学習を学ぶにあたり必須の知識だと思いますので、少しずつなれていきたいと思います。

用語が難解

『はじめてのパターン認識』は筑波大学名誉教授の平井有三さんが著者ということもあって、数学をきちんと学んだ大学生向けの内容となっているのかなと感じました。

数学2Bまでしか学んでいない僕にとっては、聞きなれない用語がたくさんあって、つまずくことが多かったです。

備忘のため僕が現時点で理解できなかった用語をまとめました。 (知っている人からするとそんなことも知らないのかよと怒られるかもしれません。。。)

第2章までは、なんとなく理解できたので、第3章以降で理解できなかった用語を挙げていきます。

第3章

第4章

  • 正規直行基
  • 回転行列
  • 無相関化
  • 白色化

第5章

  • ボロノイ領域
  • ボロノイ境界
  • ベイズ誤り率
  • 漸近仮定

第6章

  • 正規方程式
  • フィッシャーの基準
  • 一般化固有値問題
  • 判別分析法
  • ロジスティック回帰

第7章

  • 誤差逆伝播
  • 固定増分誤り訂正法
  • パーセプロトロンの収束定理

第8章

  • サポートベクトルマシン
  • スラック変数
  • ソフトマージン識別器

第9章

第10章

第11章

細かいところは分からなかったけど、概ね理解はできた。

上記の分からない用語を今後理解していけるよう勉強していきたいと思います!

とりあえず、初心者によさげな『人口知能プログラミングのための数学がわかる本』を読みたいと思います。

人工知能プログラミングのための数学がわかる本

人工知能プログラミングのための数学がわかる本