AB Lab

abgata20000 blog.

SSHの公開鍵認証

参考サイト

秘密鍵と公開鍵を作成

1
ssh-keygen -t rsa

公開鍵を転送

1
scp -P 22 id_rsa.pub user@hostname/.ssh

公開鍵を設定

1
2
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

SSHで公開鍵認証を設定

1
sudo vim /etc/ssh/sshd_config
/etc/ssh/sshd_config
1
PubkeyAuthentication yes

sshdを再起動

1
sudo service sshd restart

公開鍵でSSH接続する

1
ssh -i ~/.ssh/id_rsa user@hostname

~/.ssh/id_rsa であれば省略可能

net/http/response.rbのバグ修正

参考サイト

概要

Rubyでブログ投稿しようと頑張っていたら、ハマった。

xml-rpcで投稿していた所、

jugemやseesaaは問題なく投稿や情報の取得ができていたのだが、

FC2に投稿しようとするとエラーが出る。

Wrong size. Was 31564, should be 1501

いろいろ調べてみたらどうやらRubyの標準ライブラリの

net/http/response.rb

のバグらしい

https://github.com/ruby/ruby/pull/308/files

で修正パッチが記載してあったので、こちらを利用することに

他の対応方法

response.rb を書き換える方法ではなく、

libxml というライブラリを使う方法もあるようだが、

今回は修正パッチの方法で対応

※railsでxml/libxml がないとか言われたり、関数の表現変わったりで面倒だったので

修正方法

rbenv version

で現在利用しているrubyのバージョンと場所を確認

.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/net/http

内の

response.rbを書き換える

修正箇所は参考URLを参照

一応、修正したファイルをgithubにあげておいたので、

今後は、こちらをpullしてコピーで対応しようと思う

シェルスクリプト書くかどうか検討中

https://github.com/abgata20000/net-http-response.rb.git

Sublime Text 3 で設定を共有

参考サイト

設定ファイルをDropBoxに移す

本来の設定ファイルがある場所

  • Windows: C:\Users(ユーザー名)\AppData\Roaming\Sublime Text 3\
  • Mac: /Users/(ユーザー名)/Library/Application Support/Sublime Text 3/

今回はDropBoxの直下に「SublimeText3」フォルダを作成してその中に設定ファイルを配置

DropBoxの設定ファイルからシンボリックリンクを貼る

mac

1
ln -s /Users/(ユーザー名)/Dropbox/SublimeText3/Packages /Users/(ユーザー名)/Library/Application\ Support/Sublime\ Text\ 3/Packages


ln -s /Users/(ユーザー名)/Dropbox/SublimeText3/Installed\ Packages /Users/(ユーザー名)/Library/Application\ Support/Sublime\ Text\ 3/Installed\ Packages

win

1
2
3
4
5
cd C:\Users\(ユーザー名)\AppData\Roaming\Sublime Text 3\

mklink /D "Installed Packages" "C:/Users/(ユーザー名)/Dropbox/sublime Text 3/Installed Packages"

mklink /D "Packages" "C:/Users/hogehoge/(ユーザー名)/sublime Text 3/Packages"

Sublime Text 3 の設定

参考サイト

パッケージインストールできるようにする

View > Show Console でコマンドライン入力欄を出して以下を実行

1
import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

cmd + shift + p でパッケージインストールを実行可能に

インストールするもの

Sublime Text 2 で設定を共有

参考サイト

設定ファイルをDropBoxに移す

本来の設定ファイルがある場所

  • Windows: C:\Users(ユーザー名)\AppData\Roaming\Sublime Text 2\
  • Mac: /Users/(ユーザー名)/Library/Application Support/Sublime Text 2/
  • Ubuntu: /home/(ユーザー名)/.config/sublime-text-2/

今回はDropBoxの直下に「SublimeText2」フォルダを作成してその中に設定ファイルを配置

DropBoxの設定ファイルからシンボリックリンクを貼る

mac

1
ln -s /Users/(ユーザー名)/Dropbox/SublimeText2/Packages /Users/(ユーザー名)/Library/Application\ Support/Sublime\ Text\ 2/Packages

ln -s /Users/(ユーザー名)/Dropbox/SublimeText2/Pristine\ Packages /Users/(ユーザー名)/Library/Application\ Support/Sublime\ Text\ 2/Pristine\ Packages

ln -s /Users/(ユーザー名)/Dropbox/SublimeText2/Installed\ Packages /Users/(ユーザー名)/Library/Application\ Support/Sublime\ Text\ 2/Installed\ Packages

win

1
2
3
4
5
6
7
8
cd C:\Users\(ユーザー名)\AppData\Roaming\Sublime Text 2\

mklink /D "Installed Packages" "C:/Users/(ユーザー名)/Dropbox/sublime Text 2/Installed Packages"

mklink /D "Packages" "C:/Users/hogehoge/(ユーザー名)/Dropbox/sublime Text 2/Packages"

mklink /D "Pristine Packages" "C:/Users/(ユーザー名)/Dropbox/sublime Text 2/Pristine Packages"

Graphicsmagicをインストール

参考URL:

1
vim /etc/yum.repos.d/naulinux-school.repo
/etc/yum.repos.d/naulinux-school.repo
1
2
3
4
5
6
[naulinux-school]
name=NauLinux School
baseurl=http://downloads.naulinux.ru/pub/NauLinux/6.2/$basearch/sites/School/RPMS/
enabled=0
gpgcheck=1
gpgkey=http://downloads.naulinux.ru/pub/NauLinux/RPM-GPG-KEY-linux-ink

インストール

1
sudo yum --enablerepo=naulinux-school install GraphicsMagick -y

fffmepgをYumでインストールする

参考URL:

yum-prioritiesプラグイン導入

1
2
3
4
5
sudo yum -y install yum-plugin-priorities

# 標準リポジトリとRPMforgeリポジトリの両方で提供されるパッケージについて、yum-prioritiesプラグインを導入して標準リポジトリのパッケージがRPMforgeリポジトリのパッケージで上書きされてしまわないようにするという設定をする。

sudo vi /etc/yum.repos.d/CentOS-Base.repo

各セクションの末尾に

1
priority=1

を追加。

RPMforgeリポジトリ導入

1
2
3
4
5
cd ~/tmp
sudo wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
sudo rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm
sudo rm -f rpmforge-release-*
sudo yum -y update rpmforge-release

ffmpegをインストール

1
sudo yum --enablerepo=rpmforge install ffmpeg

Zshのインストール

参考サイト

zshがインストールされているかを確認

1
zsh --version

yumでzshをインストール

1
sudo yum -y install zsh

zshの起動とログイン・シェルの設定

現在使用しているshellの確認

1
echo $SHELL

使用可能なshellの確認

1
cat /etc/shells

ログイン・シェルに設定

1
chsh -s /bin/zsh

zshの設定をgithubから取得して反映する

1
2
3
git clone https://github.com/abgata20000/zsh.d.git ~/.zsh.d
echo "source ~/.zsh.d/zshrc" > ~/.zshrc
echo "source ~/.zsh.d/zshenv" > ~/.zshenv

ログインし直すと反映される ※ユーザー毎に設定

rbenvでRubyをインストール

参考サイト

依存ライブリをインストール

1
2
3
4
5
6
sudo yum -y install gcc
sudo yum -y install make
sudo yum -y install openssl
sudo yum -y install openssl-devel
sudo yum -y install gcc-c++
sudo yum install -y mysql-devel

全ユーザーで共通のrbenvを利用

rubyグループを作成

1
2
3
sudo groupadd ruby
sudo usermod -G wheel,ruby myuser
sudo groups myuser

rbenvをインストール

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv
mkdir rbenv/shims rbenv/versions rbenv/plugins

cd rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git ruby-build
cd ruby-build
./install.sh

cd /usr/local

chgrp -R ruby rbenv
chmod -R g+rwxX rbenv

echo 'export RBENV_ROOT="/usr/local/rbenv"'     >> /etc/profile.d/rbenv.sh
echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"'                   >> /etc/profile.d/rbenv.sh

source /etc/profile.d/rbenv.sh

echo $PATH

rubyをインストール

1
2
3
4
5
6
7
8
9
10
11
12
13
rbenv install --list

rbenv install -v 2.0.0-p353

rbenv versions

rbenv global 2.0.0-p353

rbenv rehash

rbenv versions

ruby -v

折角なのでgemをアップデート

1
gem update

ユーザー別のインストールする場合

rbenvをインストール

1
2
3
4
5
6
7
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

exec $SHELL -l

確認

1
rbenv -v

Seleniumのインストールと簡単な使い方

参考サイト

gemをインストールする。

1
gem install selenium-webdriver

起動と終了

1
2
3
driver = Selenium::WebDriver.for :firefox # ブラウザ起動

driver.quit # ブラウザ終了

:firefox のところは :ieとか:chromeとか:operaとか好きなのを

ページ、フレーム移動

1
2
3
driver.navigate.to 'http://example.com' # URLを開く
driver.switch_to.frame(1)               # 1つめの子フレームに移動
driver.switch_to.frame("frameid")       # フレームのnameを指定して移動

要素を指定

1
2
3
4
5
6
element = driver.find_element(:name, 'calendar')        # nameで指定
element = driver.find_element(:id, 'calendar')          # idで指定
element = driver.find_element(:class, 'right_box')      # classで指定
element = element.find_element(:tag_name, 'table')      # 要素名で指定
element = element.find_element(:xpath, 'tr[2]/td[3]/a') # XPathで指定
element = driver.find_element(:class, 'body').find_element(:name, 'form').find_elements(:xpath, './/input')[2] # メソッドチェーン

DriverとElementがどちらもfindelement・findelementsメソッドを持っている。

入力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# テキストフィールドへ入力・削除
element = driver.find_element(:name, 'userId')
element.send_keys('username')
element.clear

# ドロップダウンリスト選択
select = Selenium::WebDriver::Support::Select.new(driver.find_element(:id, 'dropdown'))
select.select_by(:value, 'item1')       # valueの値で選択
select.select_by(:text, 'どちらでもない') # 表示テキストで選択
select.select_by(:index, 2)             # インデックス(0始まり)で選択

# ラジオボタン選択
driver.find_elements(:name, 'selectOne')[2].click

# リンクやボタンを押す
driver.find_element(:xpath, '//table[2]/tr[3]/td[1]/a').click

情報取得

1
2
3
4
5
6
7
8
9
10
11
12
13
# 要素の内容テキスト
puts element.text

# Firefoxでダウンロードのリンクを踏んだとき保存確認ダイアログを出さずに指定のフォルダに保存
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.folderList'] = 2
profile['browser.download.useDownloadDir'] = true
profile['browser.download.dir'] = 'path/to/downloadFolder'
profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv'
driver = Selenium::WebDriver.for :firefox, :profile => profile

# スクリーンショットを撮る
driver.save_screenshot('path/to/filename.png')

chomeのプロフィール設定

1
2
3
4
5
6
7
8
prefs = {
  :download => {
    :prompt_for_download => false,
    :default_directory => "/path/to/dir"
  }
}

driver = Selenium::WebDriver.for :chrome, :prefs => prefs

macでchromeを指定するとエラーが出たので対応

ドライバーをダウンロードしてくる

http://chromedriver.storage.googleapis.com/index.html

ドライバにバスを通す

1
ln -s /path/to/chromedriver /usr/bin/chromedriver

とりあえず /user/bin/にシンボリックリンクを貼った 直接パス通す方法でもOK