VirtualBOX+Vagrant+Ansibleで開発環境を作る その1
こちらの記事を参考にAnsibleを動かしてみたいと思います。
↑の記事は仮想サーバを2本立てて一方をcontroller、もう一方をtargetとしていますが、今回はtargetだけ仮想でたてて、Macをコントローラとして動かしたいと思います。
事前準備
- Vagrant 2.0.3
- VirtualBox 5.2.8r121009
- ansible 2.5.0
VagrantとVirtualBoxはサイトからdmgをDL/ansibleはbrew installしました。 ansibleの導入にはpython 2.6+なのですが、私のmacにはPython 2.7.10が入ってたのでそのまま進めます。
仮想サーバtargetを作成します。
% mkdir vagrant % cd vagrant % vagrant init
vagrantfileが生成されるので、targetサーバの情報を書き込みます。OSはCentOS7にしました。
Vagrant.configure(2) do |config| config.vm.define "target" do |node| node.vm.box = "centos/7" node.vm.hostname = "target" node.vm.network :private_network, ip: "192.168.100.20" node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220 end end
起動します。
% vagrant up
これだけ。めっちゃ早い。 sshで疎通を確認しますが、まあ通りません。認証エラーです。 Vagrant 1.7以降、vagrant up 時に旧来の insecure_key を検知した場合、その仮想マシン用の別の鍵ペアを生成して insecure_key を置き換える仕様になったそうです。
Windowsでvagrant upした後にsshログインする方法 · DQNEO起業日記
こちらの記事の通り、sshログイン情報は"vagrant ssh-config"コマンドを叩くと教えてくれるので、設定された情報を元にsshが通ることを確認します。
ansible疎通
対象ホストをまとめて記述したinventoryファイルを作り、ハンズオンのPlaybookを試してみます。 SSHはssh configを参照するように設定したので、inventory/hosts にはssh configで設定したホスト名で記述します。 試してみる、のtest.ymlの中身もuserを書き換えます。
■ssh config
Host vag.tst Hostname 192.168.100.20 User vagrant IdentityFile ~/workspace/vagrant/.vagrant/machines/target/virtualbox/private_key
■inventory/hosts
[targets] vag.tst
■test.yml
- hosts: targets user: vagrant ← tasks: - name: output message. debug: msg="{{ message }}" - name: output fruits debug: msg="We want {{ item.value.amount }} {{ item.key }} !" with_dict: "{{ fruits }}"
Ansibleをもう少し試す
ハンズオン通り下記のPlaybook(main.yml)を実行してみます。( jqだけEPELリポジトリを追加してそちらから取得しないといけないのでいったん削除)
- hosts: targets user: vagrant tasks: - name: install packages from yum yum: name={{ item }} state=latest with_items: - ruby - httpd - name: register cron job cron: name="check ping" day="*/2" hour="12" minute="0" job="ping -c 3 192.168.100.10" - name: create directories file: path={{ item.path }} owner={{ item.owner }} group={{ item.group }} mode=0{{ item.mode }} state=directory with_items: - { "path":"/opt/ansible", "owner":"root", "group":"root", "mode":"755" } - { "path":"/opt/vagrant", "owner":"vagrant", "group":"vagrant", "mode":"755" } - name: copy files copy: src=./files/hoge dest=/opt/ansible/hoge owner=root group=root mode=0755 - name: copy template files template: src=./templates/fuga.j2 dest=/opt/ansible/fuga owner=root group=root mode=0755
↓結果↓
% ansible-playbook -i inventory/hosts main.yml PLAY [targets] ********************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [vag.tst] TASK [install packages from yum] *************************************************************** failed: [vag.tst] (item=[u'ruby', u'httpd']) => {"changed": true, "item": ["ruby", "httpd"], "msg": "You need to be root to perform this command.\n", "rc": 1, "results": ["Loaded plugins: fastestmirror\n"]} to retry, use: --limit @/Users/username/workspace/ansible/main.retry PLAY RECAP ************************************************************************************* vag.tst : ok=1 changed=0 unreachable=0 failed=1
yumを実行するためにルートユーザにならないとダメそうです。Playbook(main.yml)を修正
- hosts: targets user: vagrant become: yes ←タスクすべてをsudoで実行する tasks: (後略)
↓結果↓
% ansible-playbook -i inventory/hosts main.yml PLAY [targets] ********************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [vag.tst] TASK [install packages from yum] *************************************************************** changed: [vag.tst] => (item=[u'ruby', u'httpd']) TASK [register cron job] *********************************************************************** changed: [vag.tst] TASK [create directories] ********************************************************************** changed: [vag.tst] => (item={u'owner': u'root', u'path': u'/opt/ansible', u'group': u'root', u'mode': u'755'}) changed: [vag.tst] => (item={u'owner': u'vagrant', u'path': u'/opt/vagrant', u'group': u'vagrant', u'mode': u'755'}) TASK [copy files] ****************************************************************************** changed: [vag.tst] TASK [copy template files] ********************************************************************* changed: [vag.tst] PLAY RECAP ************************************************************************************* vag.tst : ok=6 changed=5 unreachable=0 failed=0
成功しました!タスクごとにbecomeを設定することもできるらしいので開発環境作るときはもうちょっとちゃんとやる。
[vagrant@target ~]$ ruby -v ruby 2.0.0p648 (2015-12-16) [x86_64-linux] [vagrant@target ~]$ httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Oct 19 2017 20:39:16 [vagrant@target ~]$ sudo yum history info 2 Loaded plugins: fastestmirror Transaction ID : 2 Begin time : Fri Apr 6 07:12:11 2018 Begin rpmdb : 303:0b438f896414e3740ba8650a5ae32eb0794477ba End time : 07:12:14 2018 (3 seconds) End rpmdb : 318:c8dd1f6f94f41a558ed062c2fc3ce0f4d0411ec9 User : vagrant <vagrant> Return-Code : Success Command Line : -d 2 -y install ruby httpd Transaction performed with: Installed rpm-4.11.3-25.el7.x86_64 @anaconda Installed yum-3.4.3-154.el7.centos.1.noarch @koji-override-1 Installed yum-plugin-fastestmirror-1.1.31-42.el7.noarch @anaconda Packages Altered: Dep-Install apr-1.4.8-3.el7_4.1.x86_64 @updates Dep-Install apr-util-1.5.2-6.el7.x86_64 @base Install httpd-2.4.6-67.el7.centos.6.x86_64 @updates Dep-Install httpd-tools-2.4.6-67.el7.centos.6.x86_64 @updates Dep-Install libyaml-0.1.4-11.el7_0.x86_64 @base Dep-Install mailcap-2.1.41-2.el7.noarch @base Install ruby-2.0.0.648-33.el7_4.x86_64 @updates Dep-Install ruby-irb-2.0.0.648-33.el7_4.noarch @updates Dep-Install ruby-libs-2.0.0.648-33.el7_4.x86_64 @updates Dep-Install rubygem-bigdecimal-1.2.0-33.el7_4.x86_64 @updates Dep-Install rubygem-io-console-0.4.2-33.el7_4.x86_64 @updates Dep-Install rubygem-json-1.7.7-33.el7_4.x86_64 @updates Dep-Install rubygem-psych-2.0.0-33.el7_4.x86_64 @updates Dep-Install rubygem-rdoc-4.0.0-33.el7_4.noarch @updates Dep-Install rubygems-2.0.14.1-33.el7_4.noarch @updates history info
aws-mobile-react-native-starter day01
引き続きReactNativeの実装のサンプルにトライしてみようと思います。 今回はこちらに従って作業。
MobileHubセットアップ
プロジェクトを作成しようとすると権限でエラーが発生します。
Failed to create Mobile Hub Service Role. Sorry, but you do not have permission for this operation. For help, see http://docs.aws.amazon.com/mobile-hub/latest/developerguide/managed-policies.html. Details = User: arn:aws:iam::650593974448:user/kabe is not authorized to perform: mobilehub:CreateServiceRole on resource: arn:aws:iam::650593974448:role/MobileHub_Service_Role
たしかに、ログインしているユーザにアタッチしたAWSMobileHub_FullAccess
にはmobilehub:CreateServiceRole
がセットされてない。どこにあるんだよこれ。
調べてみたのだけどグループにアタッチできるポリシーの中ではこの権限が付与されているものはなさそう。
仕方がないからカスタムでAllowしようとしたら、ARNが必要で書き込みできない。MobileHubのARNの形式はarn:aws:mobilehub:region:account-id:project/projectID
だから、…だからそのProjectを作るために権限が足りないんだって言ってんじゃん(´;ω;`)
調べてみてもなぜAWSMobileHub_FullAccess
にCreateServiceRole
の権限が与えられていないのかは謎でした。何か理由があるのかな??教えて欲しいな。
止まっていても仕方がないのでプロジェクトのインポートだけ、ルートユーザでログインして実行します。
reactnative-starterというプロジェクトはもうあるから作れないよー!というエラーが出る(AWSこのパターン多いな…作業途中でエラーになって終わらなかったのが管理画面から見えないところで残ってるのどうにかなんないの???)のでreactnative-starter01とかで数分でできあがり。
無事aws-exports.jsを入手できたので、ローカルにnode.jsの開発環境を構築していこうと思います。
node.jsセットアップ
こちらに従って環境を構築しました。特に大きな問題なく。
途中nodebrew install-binary latest
するときだけ、フォルダがないよと怒られるので、自分でフォルダ掘っておけば通る。
あとシャチョさんのオススメでbashではなくzshを使っているので、実行パスは.bashrcではなく.zshrcに書くこと(ハマった)
さて、手順に戻ってアプリの実行を試していきます。
npm install で必要なパッケージのダウンロード > npm startまでは問題なくできました。が、react-nativeインストールしてねぇな???
react-nativeセットアップ
ホントQiitaがなかったら心折れてる。
指示通りwatchman,flow,React Nativeをインストールします。
$ brew install watchman $ brew install flow $ npm install -g react-native-cli
特になんの問題もなく(‘ω‘ )
$ watchman -v 4.9.0 $ flow version Flow, a static type checker for JavaScript, version 0.61.0 $ react-native -v react-native-cli: 2.0.1
aws-mobile-react-native-starter アプリの実行
指示通りnpm start
でサーバを起動して、別のターミナルからiOSシミュレータを起動してみます。
$ react-native run-ios Scanning 740 folders for symlinks in /Users/k-abe/Desktop/aws-mobile-react-native-starter-master/client/node_modules (8ms) Found Xcode project awsmobilereactnativesample.xcodeproj xcrun: error: unable to find utility "instruments", not a developer tool or in PATH Command failed: xcrun instruments -s xcrun: error: unable to find utility "instruments", not a developer tool or in PATH
うむむ、XcodeのCommand line toolsをみつけられないっぽい??
Xcode > Preference > Locations でコマンドラインツールが指定されてなかったので設定します。
起動したー!!!
Ruby Sample for AWS Cloud9 day2
先日のgemの置き場の件、
sudoしないでgem installし直したら治った。なんなのよ(´;ω;`)
これ、rvmさんのサイト見たら
RVM: Ruby Version Manager - Sudo Integration with RVM
By default, when you use sudo your current shell environment is not passed through to the session created by it, but RVM already allows for easier access to sudo calls with rvmsudo.
となっていて、
RVM+sudoで`sudo: gem: command not found`とか言われたら`rvmsudo`を使えばいいらしいよ。 | Ginpen.com
sudoはシェルを改めて開始するためrvm useされてない状態になるから駄目、という事らしい。その点rvmsudoはRVM+Rubyを使うための環境変数をちゃんと設定してくれるそうだ。
ということらしい。AWSSampleのチュートリアル手順、rvmsudoに直したほうが良いのでは??って思った。
閑話休題。
Step 6: Run the AWS SDK Code
再開します。
http://docs.aws.amazon.com/cloud9/latest/user-guide/credentials.html
ん?ちゃんと読んでなかったけど、
If you are using an EC2 environment, you can skip the rest of this topic, as AWS managed temporary credentials are already set up for you in the environment.
って書いてません??書いてません…???
Access Permissions Reference for AWS Cloud9 - AWS Cloud9
指示に従ってPreferences開くと警告が出ました。
Force UpdateしてPreferences>AWS Settings>Credentialsを確認。
ONになっていたので、もう一度手順通りRun the AWS SDK Codeしてみます。
通った!!
が、bucketあるって言われてコケますね。ないんだけどなぁ。
Step 7: Clean Up
これはenvironmentを削除するだけ。簡単。
なぜかいろいろ試行錯誤してしまったので、もう一度通してやり直して見ようと思いますが、いったん一通り動いたぞ(๑•̀ㅂ•́)و✧。
Ruby Sample for AWS Cloud9
「そもそもAWS Cloud9、Ruby on Railsサポートしてないんじゃない?テンプレ消えてない??」
って言われたので方向転換してとりあえずAWS Cloud9上でRubyを動かしてみようと思います。
トライするのはこれ。 docs.aws.amazon.com
Step 1: Install Required Tools
kabe:~/environment $ ruby --version ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Rubyは入ってるので(知ってる)、yumの最新化だけしとく。
Step 2: Add Code
Step 3: Run the Code
普通にうごくね。
Step 4: Install and Configure the AWS SDK for Ruby
AWS SDK for RubyをつかってAWSの他のサービスを操作してみる。
まずはAWS SDK for Rubyのインストール
kabe:~/environment $ gem --version 2.6.14 kabe:~/environment $ sudo gem install aws-sdk Fetching: jmespath-1.3.1.gem (100%) 〜中略〜 135 gems installed
スムーズにすすむ(´;ω;`)
ここで他のAWSサービスを操作するための権限設定をしなくてはならないのでIAMコンソールに移動。
After you install the AWS SDK for Ruby, you must set up credentials management in your environment. The AWS SDK for Ruby needs these credentials to interact with AWS services.
Create and Use an Instance Profile to Manage Temporary Credentials
To create an instance profile
Cloud9はEC2でいいのかな???
To attach an instance profile to an instance
Cloud9のEC2インスタンスにさっき作ったRoleをアタッチする
Cloud9に戻ってaws configure
を実行
kabe:~/environment $ aws configure AWS Access Key ID [****************R27Q]: AWS Secret Access Key [****************WYVB]: Default region name [ap-southeast-1]: ap-southeast-1 Default output format [None]:
Step 5: Add AWS SDK Code
Roleの設定ができたのでRuby Sampleに戻ります。
YOUR_REGIONを環境に合わせて書き換えるの忘れないで。
Step 6: Run the AWS SDK Code
Oh...エラー出ちゃった…
どうもさっきインストールしたaws-sdk
にパスが通ってない??
aws-sdk
自体は/usr/local/share/ruby/gems/2.0/gems
にインストールされている模様
kabe:~/environment $ gem env RubyGems Environment: - RUBYGEMS VERSION: 2.6.14 - RUBY VERSION: 2.4.1 (2017-03-22 patchlevel 111) [x86_64-linux] - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1 - USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0 - RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.4.1/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin - SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /usr/local/rvm/rubies/ruby-2.4.1/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /usr/local/rvm/gems/ruby-2.4.1 - /usr/local/rvm/gems/ruby-2.4.1@global - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /home/ec2-user/.nvm/versions/node/v6.11.4/bin - /usr/local/rvm/gems/ruby-2.4.1/bin - /usr/local/rvm/gems/ruby-2.4.1@global/bin - /usr/local/rvm/rubies/ruby-2.4.1/bin - /usr/local/bin - /bin - /usr/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /usr/local/sbin - /usr/sbin - /sbin - /opt/aws/bin - /usr/local/rvm/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin kabe:~ $ which gem /usr/local/rvm/rubies/ruby-2.4.1/bin/gem
そうだよねぇ…そこにないもんねぇ。なんで違うとこにインストールされちゃったのかな。
いったんPATH通してみる。
kabe:~/ $ export RUBYLIB=/usr/local/share/ruby/gems/2.0/gems kabe:~ $ source .bashrc function
うーん、ダメでした。そもそもrvmで管理してるgemの置き場所じゃないところにaws-sdk
をインストールしちゃってるのがダメなのかな??
てかINSTALLATION DIRECTORY
にインストールされるはずなんだけど、なんで違うとこに入っちゃうの??
kabe:~ $ gem install aws-sdk 〜略〜 kabe:~ $ find /usr/local/ -name "aws-sdk-s3-1.8.0*" /usr/local/share/ruby/gems/2.0/specifications/aws-sdk-s3-1.8.0.gemspec /usr/local/share/ruby/gems/2.0/cache/aws-sdk-s3-1.8.0.gem /usr/local/share/ruby/gems/2.0/gems/aws-sdk-s3-1.8.0 /usr/local/share/ruby/gems/2.0/doc/aws-sdk-s3-1.8.0 /usr/local/rvm/gems/ruby-2.4.1/specifications/aws-sdk-s3-1.8.0.gemspec /usr/local/rvm/gems/ruby-2.4.1/cache/aws-sdk-s3-1.8.0.gem /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0 /usr/local/rvm/gems/ruby-2.4.1/doc/aws-sdk-s3-1.8.0
sudo
しないでgem install
し直したら治った。なんなのよ(´;ω;`)
/usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': The AWS Access Key Id you provided does not exist in our records. (Aws::S3::Errors::InvalidAccessKeyId) from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:22:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/plugins/dualstack.rb:26:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:20:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/idempotency_token.rb:17:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/param_converter.rb:24:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/plugins/response_target.rb:23:in `call' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-core-3.11.0/lib/seahorse/client/request.rb:70:in `send_request' from /usr/local/rvm/gems/ruby-2.4.1/gems/aws-sdk-s3-1.8.0/lib/aws-sdk-s3/client.rb:3321:in `list_buckets' from /home/ec2-user/environment/s3.rb:9:in `list_my_buckets' from /home/ec2-user/environment/s3.rb:18:in `<main>' Process exited with code: 1
違うエラーになったよ!
アクセスキーが無効…。ロールのアタッチのときにアクセスキーの発行までやったっけ???
つーことで、もっかい↓に戻ります。
Calling AWS Services from an Environment in AWS Cloud9 - AWS Cloud9
Create and Store Permanent Access Credentials in an Environment
RailsGirls_day.2-2_re:re:retry
環境構築4回目?
本筋とあまり関係ないんですが、AWS Cloud9、作った環境を消して作り直すのもワンクリックなので大変楽ちんです。
簡単簡単♪
課題を整理
現在の課題としては
RailsGirlsで指定しているRubyのバージョンは2.4.2。
rbenvで、~/environment
配下へのインストールを指示している。
に対して、AWS Cloud9ではrvmで管理されているRubyが元々組み込まれており、バージョンは2.4.1。
→つまりrvmを使って2.4.2を使える環境を作れればいけるのかも?
rvmでRuby2.4.2を追加インストール
ここまで調べてきてsudoが全然うまく動かなくてなんじゃいなと思っていたんですけど解決した。
RVM+sudoで`sudo: gem: command not found`とか言われたら`rvmsudo`を使えばいいらしいよ。 | Ginpen.com
sudoはシェルを改めて開始するためrvm useされてない状態になるから駄目、という事らしい。その点rvmsudoはRVM+Rubyを使うための環境変数をちゃんと設定してくれるそうだ。
ということでrvmsudo
つかってみます。
#バージョン確認 $ruby -v #インストールできるRubyのバージョンを確認 $rvm list known #2.4.2がないのでrvmのバージョンを上げる $rvmsudo rvm get head #rvm再起動 $rvm reload #インストールできるRubyのバージョンを確認 $rvm list known #2.4.2をインストールする $rvmsudo rvm install 2.4.2 #バージョンを確認 $ruby -v #2.4.2をデフォルトで使うように指定 $rvm --default use 2.4.2 #バージョンを確認 $ruby -v
コンソールのログを取り忘れました…。ここまでやると2.4.1と2.4.2が共存している状態になってる、らしい。
rvmsudo
使わないと書き込めない領域にRubyインストールしてんのもなんか気持ち悪いんだけど。
Rails Girls インストール・レシピ つづき
4. Bundlerのインストール
普通にやるとpermission errorでるので
rvmsudo gem install bundler --no-document
4. Railsのインストール
同じく
gem install rails --no-document
インストールレシピ完了しました。
Rails Girls アプリ・チュートリアル
railsgirls という名前の Rails アプリを作っていきます。
作っていきましょう!
ここも適宜rvmsudo
しないと通らない。なんか絶対変だって(´;ω;`)
$mkdir projects $cd projects $rvmsudo rails new railsgirls $cd railsgirls $rvmsudo rails server -b 0.0.0.0
コンソール上はなんとか起動しているようにみえる。
…いけた…??
メニューから ‘preview’ - ‘port 3000’ を選んでください。
その項目ないです(´;ω;`)
ガイドやチュートリアルで、ブラウザから例えば http://localhost:3000 へアクセスする場合は、アドレス欄に入力するのではなく、画面上部から ‘Preview’ - ‘Priview Running Application’ を選ぶことで同じ操作ができます。
"起動してるアプリケーションなんざないで!!"って言われます。どうしてー(´;ω;`)
RailsGirls_day.2-1_re:retry
環境構築さんかいめ
EC2のCloud9環境からrvmを削除するところから始めます。
kabe:~/environment $ rvm seppuku
切腹!
kabe:~ $ which ruby /usr/bin/which: no ruby in (/home/ec2-user/.nvm/versions/node/v6.11.4/bin:/usr/local/rvm/gems/ruby-2.4.1/bin:/usr/local/rvm/gems/ruby-2.4.1@global/bin:/usr/local/rvm/rubies/ruby-2.4.1/bin:/usr/local/bin:/bin:/usr/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/usr/local/rvm/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin) kabe:~ $ ruby -v bash: ruby: command not found
Rubyがない状態になりました。
RailsGirlsの環境を作るよ
4. rbenv を使って Ruby の version を最新にする
↑に従ってRubyインストール。 今回は特に問題なく進みました(●´ω`●)
4. Bundlerのインストール
kabe:~/environment $ gem install bundler --no-document Fetching: bundler-1.16.0.gem (100%) ERROR: While executing gem ... (Errno::EACCES) Permission denied @ dir_s_mkdir - /usr/local/rvm
うーん…やっぱり/usr/local/rvm
でgemを実行しようとするみたい…どうしたら…??
kabe:~ $ gem env RubyGems Environment: - RUBYGEMS VERSION: 2.6.13 - RUBY VERSION: 2.4.2 (2017-09-14 patchlevel 198) [x86_64-linux] - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1 - USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0 - RUBY EXECUTABLE: /home/ec2-user/.rbenv/versions/2.4.2/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin - SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /home/ec2-user/.rbenv/versions/2.4.2/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /usr/local/rvm/gems/ruby-2.4.1 - /usr/local/rvm/gems/ruby-2.4.1@global - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /home/ec2-user/.rbenv/versions/2.4.2/bin - /home/ec2-user/.rbenv/libexec - /home/ec2-user/.rbenv/plugins/ruby-build/bin - /home/ec2-user/.rbenv/shims - /home/ec2-user/.rbenv/bin - /home/ec2-user/.nvm/versions/node/v6.11.4/bin - /usr/local/rvm/gems/ruby-2.4.1/bin - /usr/local/rvm/gems/ruby-2.4.1@global/bin - /usr/local/rvm/rubies/ruby-2.4.1/bin - /usr/local/bin - /bin - /usr/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /usr/local/sbin - /usr/sbin - /sbin - /opt/aws/bin - /usr/local/rvm/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin
この、INSTALLATION DIRECTORY
ってのとGEM PATHS
がrvmになってるのがだめっぽい。これrvm消しただけではダメなのね(´;ω;`)
RVMのために通していたパスを削除します。人によってパスを書いてるファイルが異なると思うので、「.bashrc」「.bash_profile」「.bash_login」「.profile」「.zshrc」とか、自分がパスを追加したファイルを開いてRVM関連の記述を削除します。
もしかしてこの辺の問題なのかな??だとするとそもそもこの環境EC2から提供されてるから、やっぱりrvmとrbenvの共存を実現するところから始めないとダメなんだろうか。結局のところgemインストールパスを変更できないのでbundlerのインストールができない、という問題は初日から何も変わっていないわけで、今日も進捗ゼロ。
RailsGirls_day.1-3retry
Rails Girls インストール・レシピ:クラウドサービスを利用する Rails Girls - Japanese
ということで再挑戦です。
- rbenv を使って Ruby の version を最新にする
kabe:~/environment $ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] kabe:~/environment $ which ruby /usr/local/rvm/rubies/ruby-2.4.1/bin/ruby
この状態からスタート。 まずは/home/ec2-user/の配下にrbenvとruby-buildをclone
kabe:~/environment $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv Cloning into '/home/ec2-user/.rbenv'... remote: Counting objects: 2697, done. remote: Compressing objects: 100% (21/21), done. remote: Total 2697 (delta 13), reused 21 (delta 10), pack-reused 2666 Receiving objects: 100% (2697/2697), 506.27 KiB | 631.00 KiB/s, done. Resolving deltas: 100% (1682/1682), done. kabe:~/environment $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build Cloning into '/home/ec2-user/.rbenv/plugins/ruby-build'... remote: Counting objects: 8347, done. remote: Compressing objects: 100% (3/3), done. remote: Total 8347 (delta 1), reused 1 (delta 0), pack-reused 8344 Receiving objects: 100% (8347/8347), 1.75 MiB | 2.06 MiB/s, done. Resolving deltas: 100% (5280/5280), done.
PATHをとおして
echo 'PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bash_profile
インストールして使用バージョンを指定。
kabe:~ $ rbenv install 2.4.2 Downloading ruby-2.4.2.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2 Installing ruby-2.4.2... Installed ruby-2.4.2 to /home/ec2-user/.rbenv/versions/2.4.2 kabe:~ $ rbenv global 2.4.2 kabe:~ $ which ruby ~/.rbenv/shims/ruby
普通に行けたやないか…
5.Bundlerのインストール
kabe:~ $ gem install bundler --no-document Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2 Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2 Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0 Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1 Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5 Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/executable-hooks-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- executable-hooks/wrapper (LoadError) Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/gem-wrappers-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- gem-wrappers (LoadError) Fetching: bundler-1.16.0.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/local/rvm/gems/ruby-2.4.1 directory.
なんで/usr/local/rvm/gems/ruby-2.4.1
を見に行っちゃうんだろ。
kabe:~/environment $ gem environment Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2 Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2 Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0 Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1 Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5 Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/executable-hooks-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- executable-hooks/wrapper (LoadError) Error loading RubyGems plugin "/usr/local/rvm/gems/ruby-2.4.1@global/gems/gem-wrappers-1.3.2/lib/rubygems_plugin.rb": cannot load such file -- gem-wrappers (LoadError) RubyGems Environment: - RUBYGEMS VERSION: 2.6.13 - RUBY VERSION: 2.4.2 (2017-09-14 patchlevel 198) [x86_64-linux] - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1 - USER INSTALLATION DIRECTORY: /home/ec2-user/.gem/ruby/2.4.0 - RUBY EXECUTABLE: /home/ec2-user/.rbenv/versions/2.4.2/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.4.1/bin - SPEC CACHE DIRECTORY: /home/ec2-user/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /home/ec2-user/.rbenv/versions/2.4.2/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /usr/local/rvm/gems/ruby-2.4.1 - /usr/local/rvm/gems/ruby-2.4.1@global - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /home/ec2-user/.rbenv/versions/2.4.2/bin - /home/ec2-user/.rbenv/libexec - /home/ec2-user/.rbenv/plugins/ruby-build/bin - /home/ec2-user/.rbenv/shims - /home/ec2-user/.rbenv/bin - /home/ec2-user/.nvm/versions/node/v6.11.4/bin - /usr/local/rvm/gems/ruby-2.4.1/bin - /usr/local/rvm/gems/ruby-2.4.1@global/bin - /usr/local/rvm/rubies/ruby-2.4.1/bin - /usr/local/bin - /bin - /usr/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /usr/local/sbin - /usr/sbin - /sbin - /opt/aws/bin - /usr/local/rvm/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin - /home/ec2-user/.local/bin - /home/ec2-user/bin
うーん…どうもrvm管理のものと混ざってしまっているように見える(´;ω;`)
which gem
すると~/.rbenv/shims/gem
が返ってくるんだけど、GEM PATHSにこのパスが無いのがおかしい??のかな??
調べてる途中でsudo
してしまって通っちゃった
kabe:~/environment $ sudo gem install bundler --no-rdoc --no-ri Fetching: bundler-1.16.0.gem (100%) GemWrappers: Can not wrap missing file: bundle GemWrappers: Can not wrap missing file: bundler GemWrappers: Can not wrap missing file: sprockets GemWrappers: Can not wrap missing file: thor GemWrappers: Can not wrap missing file: rackup GemWrappers: Can not wrap missing file: bundle GemWrappers: Can not wrap missing file: rails GemWrappers: Can not wrap missing file: ruby_executable_hooks GemWrappers: Can not wrap missing file: rake GemWrappers: Can not wrap missing file: nokogiri GemWrappers: Can not wrap missing file: bundler Successfully installed bundler-1.16.0 1 gem installed kabe:~/environment $ sudo gem install rails --no-document GemWrappers: Can not wrap missing file: sprockets GemWrappers: Can not wrap missing file: thor GemWrappers: Can not wrap missing file: rackup GemWrappers: Can not wrap missing file: bundle GemWrappers: Can not wrap missing file: rails GemWrappers: Can not wrap missing file: ruby_executable_hooks GemWrappers: Can not wrap missing file: rake GemWrappers: Can not wrap missing file: nokogiri GemWrappers: Can not wrap missing file: bundler Successfully installed rails-5.1.4 1 gem installed
これで先にすすめるんだろうか…一旦やってみる。
kabe:~/environment $ mkdir projects kabe:~/environment $ cd projects kabe:~/environment/projects $ rails new railsgirls Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2 Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2 Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0 Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1 Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5 create create README.md create Rakefile create config.ru create .gitignore create Gemfile run git init from "." Initialized empty Git repository in /home/ec2-user/environment/projects/railsgirls/.git/ create app create app/assets/config/manifest.js create app/assets/javascripts/application.js create app/assets/javascripts/cable.js create app/assets/stylesheets/application.css create app/channels/application_cable/channel.rb create app/channels/application_cable/connection.rb create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/jobs/application_job.rb create app/mailers/application_mailer.rb create app/models/application_record.rb create app/views/layouts/application.html.erb create app/views/layouts/mailer.html.erb create app/views/layouts/mailer.text.erb create app/assets/images/.keep create app/assets/javascripts/channels create app/assets/javascripts/channels/.keep create app/controllers/concerns/.keep create app/models/concerns/.keep create bin create bin/bundle create bin/rails create bin/rake create bin/setup create bin/update create bin/yarn create config create config/routes.rb create config/application.rb create config/environment.rb create config/secrets.yml create config/cable.yml create config/puma.rb create config/spring.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/application_controller_renderer.rb create config/initializers/assets.rb create config/initializers/backtrace_silencers.rb create config/initializers/cookies_serializer.rb create config/initializers/cors.rb create config/initializers/filter_parameter_logging.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_framework_defaults_5_1.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create lib create lib/tasks create lib/tasks/.keep create lib/assets create lib/assets/.keep create log create log/.keep create public create public/404.html create public/422.html create public/500.html create public/apple-touch-icon-precomposed.png create public/apple-touch-icon.png create public/favicon.ico create public/robots.txt create test/fixtures create test/fixtures/.keep create test/fixtures/files create test/fixtures/files/.keep create test/controllers create test/controllers/.keep create test/mailers create test/mailers/.keep create test/models create test/models/.keep create test/helpers create test/helpers/.keep create test/integration create test/integration/.keep create test/test_helper.rb create test/system create test/system/.keep create test/application_system_test_case.rb create tmp create tmp/.keep create tmp/cache create tmp/cache/assets create vendor create vendor/.keep create package.json remove config/initializers/cors.rb remove config/initializers/new_framework_defaults_5_1.rb run bundle install Ignoring executable-hooks-1.3.2 because its extensions are not built. Try: gem pristine executable-hooks --version 1.3.2 Ignoring gem-wrappers-1.3.2 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.3.2 Ignoring nio4r-2.1.0 because its extensions are not built. Try: gem pristine nio4r --version 2.1.0 Ignoring nokogiri-1.8.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.1 Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5 --- ERROR REPORT TEMPLATE ------------------------------------------------------- # Error Report ## Questions Please fill out answers to these questions, it'll help us figure out why things are going wrong. - **What did you do?** I ran the command `/usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/exe/bundle install` - **What did you expect to happen?** I expected Bundler to... - **What happened instead?** Instead, what happened was... - **Have you tried any solutions posted on similar issues in our issue tracker, stack overflow, or google?** I tried... - **Have you read our issues document, https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md?** ... ## Backtrace ` Errno::ENOTDIR: Not a directory @ rb_sysopen - /home/ec2-user/.rbenv/shims/gem/bundler.lock /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/process_lock.rb:9:in `initialize' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/process_lock.rb:9:in `open' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/process_lock.rb:9:in `lock' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/installer.rb:72:in `run' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/installer.rb:25:in `install' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli/install.rb:65:in `run' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:224:in `block in install' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/settings.rb:136:in `temporary' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:223:in `install' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor.rb:387:in `dispatch' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:27:in `dispatch' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/vendor/thor/lib/thor/base.rb:466:in `start' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/cli.rb:18:in `start' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/exe/bundle:30:in `block in <main>' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/lib/bundler/friendly_errors.rb:122:in `with_friendly_errors' /usr/local/rvm/gems/ruby-2.4.1@global/gems/bundler-1.16.0/exe/bundle:22:in `<main>' ` ## Environment ` Bundler 1.16.0 Platforms ruby, x86_64-linux Ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] Full Path /home/ec2-user/.rbenv/versions/2.4.2/bin/ruby Config Dir /home/ec2-user/.rbenv/versions/2.4.2/etc RubyGems 2.6.13 Gem Home /home/ec2-user/.rbenv/shims/gem Gem Path User Path /home/ec2-user/.gem/ruby/2.4.0 Bin Dir /home/ec2-user/.rbenv/shims/gem/bin OpenSSL Compiled OpenSSL 1.0.2k 26 Jan 2017 Loaded OpenSSL 1.0.2k-fips 26 Jan 2017 Cert File /etc/pki/tls/cert.pem Cert Dir /etc/pki/tls/certs Tools Git 2.13.6 RVM 1.29.3 (latest) rbenv rbenv 1.1.1-25-g6aa70b6 chruby not installed ` ## Bundler Build Metadata ` Built At 2017-10-31 Git SHA 10f20fa33 Released Version true ` ## Bundler settings ` path Set for the current user (/home/ec2-user/.bundle/config): "/home/ec2-user/.rbenv/shims/gem" disable_shared_gems Set for the current user (/home/ec2-user/.bundle/config): true ` ## Gemfile ### Gemfile `ruby source 'https://rubygems.org' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.1.4' # Use sqlite3 as the database for Active Record gem 'sqlite3' # Use Puma as the app server gem 'puma', '~> 3.7' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 3.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] # Adds support for Capybara system testing and selenium driver gem 'capybara', '~> 2.13' gem 'selenium-webdriver' end group :development do # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] ` ### Gemfile.lock ` <No /home/ec2-user/environment/projects/railsgirls/Gemfile.lock found> ` --- TEMPLATE END ---------------------------------------------------------------- Unfortunately, an unexpected error occurred, and Bundler cannot continue. First, try this link to see if there are any existing issue reports for this error: https://github.com/bundler/bundler/search?q=Not+a+directory+%40+rb_sysopen+-+%2Fhome%2Fec2-user%2F.rbenv%2Fshims%2Fgem%2Fbundler.lock&type=Issues If there aren't any reports for this error yet, please create copy and paste the report template above into a new issue. Don't forget to anonymize any private data! The new issue form is located at: https://github.com/bundler/bundler/issues/new run bundle exec spring binstub --all bundler: command not found: spring Install missing gem executables with `bundle install`
やっぱりねー! やっぱ一度rvmを削除してrbenvでRubyインストールするところから始めたほうがよさそうな気がしてきました。 もう一度最初から。