geek-peachの日記

geekを目指してpeachが頑張るブログ。実行したコマンドやデータ分析についてメモっていく

R Studio Serverのインストール

めっちゃ久しぶりの更新だ。。。

というわけで、R Studio Serverのインストール方法

 rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install R

yum install openssl098e compat-libgfortran-41

wget http://download2.rstudio.org/rstudio-server-0.98.501-x86_64.rpm

yum install --nogpgcheck rstudio-server-0.98.501-x86_64.rpm

rstudio-server verify-installation #インストールの確認。このコマンドで起動も行われます。

rstudio-server start #普通に起動するならこれでOK

インストールはこれで終わり。

FWに穴を開けて、http://IPアドレス:8787/にアクセスすればOK!

 

rbenvによるrubyのインストール(コマンドのみ)

rbenvでrubyをインストールするときのメモ。解説はない!

rootで実行すれば他のユーザもruby及びrbenvが使えるようになる。

 

cd /usr/local/src/

rpm -Uvh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

vi /etc/yum.repos.d/remi.repo

remiのrepoをenable=1に変更

 

yum -y install tmux git

yum -y install gcc

 

cd /usr/local/

git clone https://github.com/sstephenson/rbenv.git

mkdir rbenv/shims rbenv/versions

groupadd rbenv

chgrp -R rbenv rbenv/

chmod -R g+rwxXs rbenv/

 

cd /usr/local/src/

git clone https://github.com/sstephenson/ruby-build.git

cd ruby-build/

./install.sh

 

vi /etc/profile.d/rbenv.sh

 

(以下を加える

export RBENV_ROOT="/usr/local/rbenv"

export PATH="/usr/local/rbenv/bin:$PATH"

eval "$(rbenv init -)"

 

visudo

(Defaults    env_keep += "PATH"を加える)

 

rbenv install -l

rbenv install 1.9.3-p392

rbenv global 1.9.3-p392

ESXi5.1のPXE起動によるアップグレード

ESXiの5.1が出た(もう一ヶ月ぐらいまえだけど・・・)ので、アップグレードすることにしました。

普通にCDに焼いてアップグレードしようとしたらCDドライブが壊れているのかCDが焼けない。。。

そこで仕方なく、PXE起動させてアップグレードを試みてみた。

 

簡単に環境の説明

ESXiを入れるサーバ:PowerEdge1950

tftpサーバを立てるマシン:普段使ってるWindowsマシン

サーバとWindowsマシンはLANケーブルで直繋ぎ

 

Windowsマシン上でtftpサーバとDHCPサーバを立てて、ESXiを入れるサーバからPXE起動させるだけです。

以下にtftpサーバとDHCPサーバの設定を載せておきます。

 

今回はtftpdというソフトを使いました。

tftpdを起動してsettingsの各タブごとの設定は以下の通り

■GLOBAL

TFTP Server、DHCP Serverにチェックを入れる。

■TFTP

PEX Compativility、Translate Unix file name、Bind TFTP to this addressにチェックを入れる。

DHCP

・IP pool starting address :192.168.0.X

・Size of pool:1

・Boot File:pxelinux.0

・Mask:255.255.255.0

Bind DHCP to this address、Persistant leaseにチェックを入れる。

 

 

SYSLINUXをダウンロード

kernel.org(ミラー)

syslinux-x.xx.zip をダウンロード(今回は4.06)

解凍して下記を tftpd32 フォルダにコピー

core\pxelinux.0

com32\menu.c32

memdisk\memdisk

 

 

ESXiのインストールイメージをコピー

tftpd32 フォルダにESXi5_1フォルダを作ってその下にISOイメージをコピー

 

ブートメニューの設定ファイルを作成

tftpd32 フォルダ内に pxelinux.cfg フォルダを作成し default ファイルを作成。

defaultファイルの中身は以下の通り。

===========================

DEFAULT menu.c32 

MENU TITLE ESXi-5.1.0

PROMPT 0

LABEL install 

KERNEL memdisk

APPEND iso initrd=ESXi5_1/VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso

===========================
 
全部設定が出来たら、一度Tftpdを再起動する。
そのあと、ESXiを入れるサーバを起動して、PXE起動する。
#うちの環境ではWindows機の無線LANを切らないと、DHCPのレスポンスがサーバに帰らずはまった。。。(デフォルトゲートウェイ無線LANルータになっているけど、サーバは直つなぎなので無線LANルータからはサーバにとどかない・・・)
 

PXE起動なんてなれない方法をとったが意外と簡単で助かった。。

 

さて、アップグレードして満足しないでどんどん使って行かなければ!

 

参考URL:http://d.hatena.ne.jp/palm84/20070403/1175609650

 

rails3.2.3でTwitterにログインしてつぶやくサンプルAP(第2回)

では、第1回の続き。

 

 

config/initializers/omniauth.rb にTwitterのコンシューマキーとシークレットを記述。

Twitterアプリのプロバイダ情報を記述。

(ここの意味がまだあまりわかっていない。

コンシューマキーとシークレットはわかるんだが・・・)

 

Rails.application.config.middleware.use OmniAuth::Builder do

  provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'

end

 

 

第一回の最後に表示された画面の「Sign in with Twitter」をクリックすると、

Twitterのアプリを許可するかという画面が現れる。(上記のomniauth.rbを書かないとエラーになる。)

そして、その画面でアプリを許可してから戻ってくる画面をこれから作っていく。

 

戻ってきた画面では、テキストボックスを用意し、そこにつぶやく内容を入力する。

ついでに、つぶやいた内容をDBに保存させる。

DBを使うときに便利なscaffoldを使って、一気にモデルと画面を作成する!

 

# rails g scaffold t_line tweet_str:string tweet_by:string

 

scaffoldでテンプレートを作ったら、以下のファイルを修正する。

・app/controllers/t_lines_controller.rb

・app/controllers/sessions_controller.rb

・app/views/t_lines/_form.html.erb

・app/views/t_lines/index.html.erb

・db/migrate/XXXXXXXXXXXXXX_create_users.rb

・config/routes.rb

 

それぞれ中身は以下の通り。

 

このアプリのメインとなるつぶやきとDB格納を行う部分。

つぶやきはcreateメソッドのなかで行なっています。

・app/controllers/t_lines_controller.rb

 

class TLinesController < ApplicationController

  # GET /t_lines

  # GET /t_lines.json

  def index

    @t_lines = TLine.all

    @tmp = 1

 

    respond_to do |format|

      format.html # index.html.erb

      format.json { render json: @t_lines }

    end

  end

 

  # GET /t_lines/1

  # GET /t_lines/1.json

  def show

    @t_line = TLine.find(params[:id])

 

    respond_to do |format|

      format.html # show.html.erb

      format.json { render json: @t_line }

    end

  end

 

  # GET /t_lines/new

  # GET /t_lines/new.json

  def new

    @t_line = TLine.new

 

    respond_to do |format|

      format.html # new.html.erb

      format.json { render json: @t_line }

    end

  end

 

  # GET /t_lines/1/edit

  def edit

    @t_line = TLine.find(params[:id])

  end

 

  # POST /t_lines

  # POST /t_lines.json

  def create

    @t_line = TLine.new(params[:t_line])

    @t_line.tweet_by = current_user.name

 

    Twitter.configure do |config|

      config.consumer_key       = " CONSUMER_KEY "

      config.consumer_secret    = " CONSUMER_SECRET"

      config.oauth_token        = current_user.token

      config.oauth_token_secret = current_user.secret

    end

 

    twitter_client = Twitter::Client.new

    twitter_client.update(@t_line.tweet_str)

 

    respond_to do |format|

      if @t_line.save

        format.html { redirect_to @t_line, notice: 'T line was successfully created.' }

        format.json { render json: @t_line, status: :created, location: @t_line }

      else

        format.html { render action: "new" }

        format.json { render json: @t_line.errors, status: :unprocessable_entity }

      end

    end

  end

 

  # PUT /t_lines/1

  # PUT /t_lines/1.json

  def update

    @t_line = TLine.find(params[:id])

 

    respond_to do |format|

      if @t_line.update_attributes(params[:t_line])

        format.html { redirect_to @t_line, notice: 'T line was successfully updated.' }

        format.json { head :no_content }

      else

        format.html { render action: "edit" }

        format.json { render json: @t_line.errors, status: :unprocessable_entity }

      end

    end

  end

 

  # DELETE /t_lines/1

  # DELETE /t_lines/1.json

  def destroy

    @t_line = TLine.find(params[:id])

    @t_line.destroy

 

    respond_to do |format|

      format.html { redirect_to t_lines_url }

      format.json { head :no_content }

    end

  end

end

 
 
・app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
def callback
    auth = request.env["omniauth.auth"]
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
    session[:user_id] = user.id
    redirect_to :controller => 't_lines', :action => 'new'
  end
 
  def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice => "Signed out!"
  end
 
end
 
 
下の_form.html.erbはtweet_byフィールドを表示しないようにコメントアウトしているだけ
・app/views/t_lines/_form.html.erb 

  

<%= form_for(@t_line) do |f| %>

  <% if @t_line.errors.any? %>

    <div id="error_explanation">

      <h2><%= pluralize(@t_line.errors.count, "error") %> prohibited this t_line from being saved:</h2>

 

      <ul>

      <% @t_line.errors.full_messages.each do |msg| %>

        <li><%= msg %></li>

      <% end %>

      </ul>

    </div>

  <% end %>

 

  <div class="field">

    <%= f.label :tweet_str %><br />

    <%= f.text_field :tweet_str %>

  </div>

<!--

  <div class="field">

    <%= f.label :tweet_by %><br />

    <%= f.text_field :tweet_by %>

  </div>

-->

  <div class="actions">

    <%= f.submit %>

  </div>

<% end %>

 

 

 

・app/views/t_lines/index.html.erb

<h1>Listing t_lines</h1>

 

<table>

  <tr>

    <th>Tweet str</th>

    <th>Tweet by</th>

    <th></th>

    <th></th>

    <th></th>

  </tr>

 

<% @t_lines.each do |t_line| %>

  <tr>

    <td><%= t_line.tweet_str %></td>

    <td><%= t_line.tweet_by %></td>

    <td><%= link_to 'Show', t_line %></td>

    <td><%= link_to 'Edit', edit_t_line_path(t_line) %></td>

    <td><%= link_to 'Destroy', t_line, confirm: 'Are you sure?', method: :delete %></td>

  </tr>

<% end %>

</table>

<br />

<%= link_to 'New T line', new_t_line_path %>

 

 

・config/routes.rb

SampleTwitter::Application.routes.draw do

  resources :t_lines

 

  get "sessions/index"

 

  match '/auth/:provider/callback' => 'sessions#callback'

  match "/signout" => "sessions#destroy", :as => :signout

 

  root :to => "sessions#index"

end
 
 
ユーザを格納するDBを作成
# rails g model user
 
以下2つのファイルを修正する。
・app/models/user.rb
class User < ActiveRecord::Base
  # attr_accessible :title, :body
  def self.create_with_omniauth(auth)
    create! do |user|
      user.provider = auth["provider"]
      user.uid = auth["uid"]
 
      if auth['info']
        user.name = auth['info']['name'] || ""
        user.screen_name = auth["info"]["nickname"]
      end
      user.token = auth['credentials']['token']
      user.secret = auth['credentials']['secret']
    end
  end
end
 
 

・ db/migrate/XXXXXXXXXXXXXX_create_users.rb

 

class CreateUsers < ActiveRecord::Migration

  def self.up

    create_table :users do |t|

      t.string :provider, :null => false

      t.string :uid, :null => false

      t.string :screen_name, :null => false, :uniq => true

      t.string :name, :null => false

      t.string :token

      t.string :secret

 

      t.timestamps

    end

    add_index :users, [:provider, :uid]

    add_index :users, [:screen_name]

  end

 

  def self.down

    drop_table :users

  end

end

 
ファイルの修正後以下を実行。
# rake db:migrate
 
第1回同様以下のようにサービスにアクセス
# rails s
http://<プロジェクトのURL>/ (route.rbにルートの設定をしたので/にアクセス出来る)
 
このままだと、ログアウトできなかったり色々不具合はあるが、そこは改良して下さい。
なにか変なところがあれば教えていただけると助かります。
 

rails3.2.3でTwitterにログインしてつぶやくサンプルAP(第1回)

こちらで使っている環境

CentOS 5.7

ruby 1.9.3p125

Rails 3.2.3

・gem 1.8.21

 

とにかくまず、プロジェクトの作成

rails new sample_twitter

 

Gemfileに以下を加える

gem 'omniauth'

gem 'execjs'

gem 'therubyracer'

gem 'omniauth-twitter'

gem 'twitter'

 

# bundle install

 

まずは、認証してログインする部分のコントローラを作る。

# rails g controller sessions index

 

■ app/views/sessions/index.html.erbを以下のように編集

<% if current_user %>

  Welcome <%= current_user.name %>!<br>

  <%= link_to "Sign Out", signout_path %>

<% else %>

  <%= link_to "Sign in with Twitter", "/auth/twitter" %>

<% end %>

 

 ■ app/controllers/application_controller.rbを以下のように修正

class ApplicationController < ActionController::Base

  protect_from_forgery

 

  helper_method :current_user

 

  private

 

  def current_user

    @current_user ||= User.find(session[:user_id]) if session[:user_id]

  end

end

 

ここまでちゃんとできていれば、

# rm public/index.html

でindex.htmlを消す。(残っていると/へのアクセスはroute.rbの記述よりindex.htmlが優先される。)

# rails s によりWebServerを起動し、

http://<プロジェクトのURL>/sessions/index

 にアクセスすれば画面が表示されるはず。。。

 

<続く>

Rails3.2.3を動かすまでにつまずいたこと

Railsでまずプロジェクトを作成しようとして速攻つまずきました。。。

 

【追記】環境を全く書いていなかったので書いておきます。

CentOS 5.7

ruby 1.9.3p125

Rails 3.2.3

・gem 1.8.21

 

# rails new <プロジェクト名>

と、実行したら以下の様なエラーが・・・

/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- openssl (LoadError)

        from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'

        from /usr/local/lib/ruby/1.9.1/net/https.rb:22:in `<top (required)>'

<中略>

        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.3/bin/bundle:13:in `<main>'

Fetching gem metadata from https://rubygems.org/.Unfortunately, a fatal error has occurred. Please report this error to the Bundler issue tracker at https://github.com/carlhuda/bundler/issues so that we can fix it. Please include the full output of the command, your Gemfile and Gemfile.lock. Thanks!

 

結局、Rubyをコンパイルする前に、いかのパッケージをインストールしました。

sqliteはいらなかったかもな~。。

sqlite-devel.x86_64

openssl-devel.x86_64

 

上記をインストールし、rubyを再インストールしたらうまくいきました。

 

【追記】

 

# rails new <プロジェクト名>

をしたあとに、出来るGemsfileに以下を追記

 

gem 'execjs'

gem 'therubyracer'

 

 

 

プロジェクトのディレクトリに移動し、以下のコマンドを実行

# rails generate scaffold <コントローラ名> <カラム名>:型 …

ここで、scaffordを行った時にエラーが出てしまい以下のパッケージもインストールした。

gcc-c++-4.1.2-52.el5.x86_64

 

# rake db:migrate

rails server

 

http://localhost:3000

にアクセス、アクセスできたら

http://localhost:3000/<コントローラ名>s

にアクセス。CRUD操作出来るWeb画面が表示されるはずです!