ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示
ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示

2019/09/01

neovim で plugin を利用せずに sudo を使う

root 権限が必要なファイルを neovim や vim で編集する事があると思います。
その際、 sudoers で許可されているユーザならば
  • :write ! sudo tee % > /dev/null
で sudo を使って root として書き込むことができます。

ですが、 neovim では
  • :write ! sudo tee % > /dev/null
    • sudo: no tty present and no askpass program specified
    • shell returned 1
と言われて sudo が使えません。


解決策

以下のようなコマンドを定義することで対応できます。 このコマンドは vim と neovim の両方で利用できます。

vim で利用する場合は ~/.vimrc に追記します。
neovim で利用する場合は ~/.cofig/nvim/init.vim に追記します。


使い方

  • $ nvim /etc/hosts
    • root 権限が必要なファイルを開いて編集します。保存の際は
  • :SudoWriteCurrentBuffer
    • を実行します。
    • パスワードを入力すれば root で書き込む事ができます。


動作確認をした環境

大元の環境(vim と neovim で動作確認済)
  • OS: macOS Mojave 10.14.6 (18G95)
  • Homebrew: 2.1.11
    • Homebrew/homebrew-core: (git revision 883ee; last commit 2019-09-01)
  • neovim: v0.3.8
  • vim: 8.0.1365
  • sudo: version 1.8.17p1
    • Sudoers policy plugin version 1.8.17p1
    • Sudoers file grammar version 45
    • Sudoers I/O plugin version 1.8.17p1
  • docker: 19.03.1, build 74b1e89

    docker を使っていくつかの distribution でも動作を確認
    • Alpine linux: 3.10.2
      • neovim: v0.3.7
      • vim: 8.1.1365
      • sudo: version 1.8.27
        • Sudoers policy plugin version 1.8.27
        • Sudoers file grammar version 46
        • Sudoers I/O plugin version 1.8.27
    • CentOS: release 7.6.1810 (Core)
      • vim: 7.4.1099
      • sudo: version 1.8.23
        • Sudoers policy plugin version 1.8.23
        • Sudoers file grammar version 46
        • Sudoers I/O plugin version 1.8.23
    • Fedora: release 30
      • vim: 8.1.1912
      • sudo: version 1.8.27
        • Sudoers policy plugin version 1.8.27
        • Sudoers file grammar version 46
        • Sudoers I/O plugin version 1.8.27
    • Ubuntu: 18.04.3
      • vim: 8.0.1453
      • sudo: version 1.8.21p2
        • Sudoers policy plugin version 1.8.21p2
        • Sudoers file grammar version 46
        • Sudoers I/O plugin version 1.8.21p2
    • Debian: 10.0 (buster-20190812)
      • vim: 8.1.1401
      • sudo: version 1.8.27
        • Sudoers policy plugin version 1.8.27
        • Sudoers file grammar version 46
        • Sudoers I/O plugin version 1.8.27


    何故 neovim では sudo が使えないのか

    ここから先は先程の Vimscript を作るに至った経緯を書きます。
    興味のある方はご覧ください。

    まず sudo の error message
    • sudo: no tty present and no askpass program specified
    を見ると、 tty と askpass が無いと言っています。


    tty と askpass

    実際、vim では
    • : ! tty
      • /dev/ttys004 
    などが得られますが、 neovim では
    • : ! tty
      • not a tty
      • shell returned 1
    と言われてしまいます。

    askpass は使ったことが無いのですが、fedora の container で dnf search すると
    の様に、いくつかの askpass が確認できます。のでちょっと試してみます。
    • x11-ssh-askpass
    • openssh-askpass
    • ksshaskpass
    という感じで全然起動してくれません。
    ですがエラーの内容的に display を開こうとしているのが分かります。
    なので、おそらく GUI で password を聞くような物だと思われます。


    askpass を作る

    askpass について調べていると、どうやら
    • password を stdout に出力するもの
    であることが分かりました。

    よって
    • neovim 内で password を取得
    • password を stdout に出力する
    • password の履歴はどこにも残さない
    ようなものを作れば解決できそうです。

    それで完成したのが /tmp/askpass を作るこの Vimscript です。

    本当はファイル名は固定でなく tempfile 的な物で対応するなど、改善点はいくつも存在するかと思います。
    ですが私は Vimscript に明るくないので、"3つの条件を満たして動けばOK" という条件で作成しました。
    他により良い対応方法があればご指摘頂けると幸いです。


    その他の解決策

    調べた結果、 suda.vim というプラグインがあるようです。
    また、他にも sudo.vim など、似たようなプラグインはいくつかあるらしいです。

    これを使わなかった理由としては
    • docker のコンテナ内で作業をする事が多々ある
    • init.vim を配置するスクリプトは既にある
    • plugin を install するスクリプトはまだ無い
    • 全コンテナに plugin を入れるのも面倒だし結構サイズがある
      • $ du -sh ~/.config/nvim/repos
        • 100M    /Users/atton/.config/nvim/repos
    などがあります。

    また、"sudo が使えるならこの際 root になってしまう" という解決策もあるのですが
    • 前述した理由の後半3つ
    • 複数人数のユーザが使う環境だと、 /root 配下に自分専用の設定を置くことになる
    のでこちらも無しで。

    他には、 "sudoers で NOPASSWD を設定する" という解決策もあります。
    が、sudo を no password でガンガン使えば実質 root で作業しているのと変わらず、危険すぎるのでこちらも無し。

    ということでこの Vimscript を書くに至った、という訳なのです。


    おまけ: 環境変数の unlet

    スクリプト内部では askpass の場所を示す SUDO_ASKPASS を設定している部分があります。
    具体的には
    • let $SUDO_ASKPASS  = s:askpass_path
    ですね。

    この環境変数を定義していると、 sudo -A した際に指定したファイルが実行されます。
    一応、 :SudoWriteCurrentBuffer の実行後にはなるべく元の環境に戻すために
    • unlet $SUDO_ASKPASS
    を書いていた時もありました。

    ですが動作確認中、 Vim 8.0.1365 で unlet 時にエラーが出てしまいました。
    また 、-A を指定しなければ sudo の動作は変わらないので 、残っていても無害と判断して unlet しない形になりました。


    おまけ: shebang を指定しないとどうなるのか

    ちなみに askpass の shebang を消すと
    • sudo: unable to run /tmp/askpass: Exec format error
    • sudo: no password was provided
    と言われる為、きちんと書いておく必要があります。


    おまけ: x flag を付けないとどうなるのか

    setfperm(s:askpass_path, "rwxr-xr-x")  をせずに 644 のままだと
    • sudo: unable to run /tmp/askpass: Permission denied
      • sudo: no password was provided
      と言われるので、こちらもきちんと指定しておく必要があります。


      参考

      2018/09/13

      ISUCON7の予選問題を解いて、スコアを27万点まで上げた

      こんにちは。フリーランスのエンジニアのあっとんです。
      仕事が一段落したのもあってプチ夏休みという名の仕事が無い期間、ISUCON7 の予選問題をやったりしました。
      それを改めてログにまとめる次第です。

      結論から言えば、予選突破のボーダーの21万点を越えられました。
      ちなみに累計作業時間は58時間くらいで、最終スコアは 270957 でした。
      あとリモートワークのお仕事を募集中(2018/09/13現在)です。


      どうして ISUCON の問題を触ってみようと思ったのか

      • Twitter でたまに見た単語で気になっていたので
      • ミドルウェアをインストールする事はあってもガリガリにチューニングする経験が無かったので
      • とりあえず数字で善し悪しが分かるので


      自分レギュレーションと目標とか

      • スコア的な目標は予選突破ボーダー(21万点くらい)
      • とりあえず最初(ISUCON7予選)はブログとか見て良いのでノウハウを積む
      • ノウハウを積んだ上で本戦問題を時間制限+解説見ずに解く


      環境構築とベンチマーカを動かす

      まずは環境構築から。
      とりあえず GCP の上に 4core 8GB の instance を上げる。
      ISUCON7 の予選問題の README.md に従って環境構築。
      初期スコアは5000点くらいだったと思います。
      ベンチマークをかける側も 4core 8GB で環境構築。


      なんとなくの知識で高速化をする

      とりあえず知ってる範囲で適当に進めていく。
      • nginx の proxy を経由せずに直接 puma で 80番を bind するように
        • スコアが 3000 くらいになる。 却下。
      • rackup する時に environment を production にする
      • logger を無しにして log を disk に書かないようにする
        • 一応スコアが 5980 くらいにはなる
      • css と js を minify する
        • yui-compressor なるものを使う
        • $ yui-compressor main.css -o minimain.css # とか
        • Validation に失敗するのでこの手は使えない
      • gzip で圧縮してみる
        • .gz を置いて配る
        • そんなにスコアが変わんなかった
      • N+1 を解決したいが SET IN ... に書き換えるのが面倒
        • 普段 ActiveRecord を使っていたので includes で解決して欲しい……
        • (後から結局 sinatra-activerecord を入れることになる)
      • SELECT * の結果に対して first していた部分に LIMIT 1 を付ける
        • 1万点くらいになる
      • メモリの上に DB の全データを載せる
        • tmpfs + rsync で載せてしまう
        • 19340 点になる。倍。
      • mysql の log の WARN を取り除く
        • 22511 点になる。10%増し。


      予測するな計測せよ

      結局何が一番のネックなのかが分からないとどうしようもない。
      ということで計測していく。
      profiling には rack-mini-profiler を使ってみた。
      さてこれでどこがネックなのか探るか、と思ったら作成されたファイルが読めない。
      結論から言えばファイルに書く前に Marshal.dump されているせいで Marshal.load しないと読めなかった。
      Marshal.dump を JSON.dump に monkey patch して無理に plain text にして jq で読む。
      しかしファイルが多すぎて(200個とか)まともに読めない。
      profiler を使うのは諦めて top だけで行くというゴリ押しをする。
      (rack-mini-profiler を rack application で動かす、というのも記事にできそうなので後から書くかもしれない)
      なお、初期の段階でベンチマークをかけると CPU を mysql が 55% 、puma が 35% くらい食っていて DB ネックだった。


      参考文献を参照開始


      1Core 1GB にスペックダウン



      11万あたりの伸び悩み

      その後もチマチマと変更を加えるものの、12万点の壁は越えられず。
      CPU使用率も合計100%にならなくなった。
      気付くのに結構かかってしまったけれど、オチとしてはメモリ不足。
      具体的には残り10k とかになっていた。
      というわけでここからは複数台構成にする。


      複数台構成



      lsyncd を使って画像の同期

      解決すべき問題は icons を3台の間でどう整合性を取って返すか。
      業務だったら S3 に置くなり CDN を使うのが良さそう。
      しかし ISUCON なので、手元にあるサーバでどうにかする必要がある。
      画像ファイル自体は1MB以下なのが保証されている。
      なので書き込み時に memcached じゃなくて全サーバに書き込むことに。
      そうすれば /icons を nginx が Cache-Control 付きで返してくれて良さそう。
      (nfs で mount しても良かったのですが、結局 network access が発生するので早くならなそうだったので断念。)
      (nfs の cache の config でどうにかなった可能性もゼロではないが……)
      最初は inotify + rsync でゴリ押ししようと思ったのですが、 lsyncd なるものを発見。
      (rdiff-backup とか osync とか csync2 とか unison とか mirror とかあるがどれも古い)
      サーバA は更新があったらサーバB に rsync。 B は C へ。 C は A へ。という形に。
      これでファイルが upload されたら全サーバが共通のファイルを返せる。
      結果、1台だけの時にスコアが 69770 に。3倍にできれば目標達成かな。


      最終的な構成

      3台 nginx にするより、2台 nginx + DB のがスコアが高かった。
      あと mysqltuner というスクリプトを見つけて、それで値を調整。
      最終的には score 270957 を達成したので脳内予選突破。



      まとめ

      • ISUCON7 の予選問題のスコアを 27 万点くらいまで上げました。
      • 作業ノートによると58時間くらいかかっているらしい。
      • これで夏休みの自由研究2018としましょうか。



      参考

      2018/05/27

      Oracle Java SE 8 JDK を CLI で Install する

      さて、Java を CLI でインストールしたい時があります。
      例えば Docker の Image を作る時などですね。 Dockerfile に書きたい。
      OpenJDK ならば yum や apt-get で Install できるのですが、Oracle の JDK だとそうはいかない。
      なので、作業ログを残しておこうかと思います。


      環境

      • macOS Sierra: 10.12.6
      • Docker for mac: version 18.03.0-ce, build 0520e24
      • Base Image: ubuntu:16.04
      • Oracle JDK: 1.8(build 1.8.0_161-b12)


      ppa:webupd8team repository

      Oracle JDK を公式のサイトから落っことしてきても良いのですが、zip と rpm しか無い。
      Ubuntu の dpkg で install したいので deb ファイルが欲しい。
      どうも調べてみると、 apt の追加 repository にあるらしい。

      ので追加して Install してみる。
      • apt-get install -y software-properties-common # install apt-add-repository command 
      • apt-add-repository -y ppa:webupd8team/java
      • apt-get update
      • apt-get install -y oracle-java8-installer
      License に同意するか聞かれるので yes 。そうしたら Install される。


      License Agreement with debconf

      License に同意する部分には stdin に yes と入れたら済むだろう、ということでやってみる。
      • yes yes | apt-get install -y oracle-java8-installer
      ところが上手くいかない。
      apt-get が license を表示するやつ(自前かlessか?)に stdin を渡していないっぽい。

      ということで調べてみたらやっぱり解決策がある。
      debconf で License を読んだことと、同意したことを事前に登録すればOKとのこと。
      • echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
      • echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections
      • apt-get install -y oracle-java8-installer
      これで yes を入力しなくても Java が Install できる。良し良し。


      参考

      2018/05/13

      Ubuntu 16.04 に CUDA を install する

      過去に CentOS7 に CUDA 環境を構築したことがある のですが、Ubuntu 16.04 上にも構築してみたのでそのログ。


      環境

      • Ubuntu: 16.04
      • CUDA: 9.1

      Install

      手順は公式のドキュメントが懇切丁寧に解説しています。
      指示された通りに
      • # apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
      • # wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
      • # dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
      • # apt update
      • # apt-get install -y cuda cuda-drivers
      したらおしまい。
      ダウンロードは 1.3GB とかかな。使う disk は 4GB くらい。
      特に問題も無く構築できたので良きかな良きかな。


      参考

      2018/04/22

      https proxy があるネットワークで Docker を動かす

      時にプロキシを介さないと外に出られないネットワークがあります。
      curl とかは http_proxy や https_proxy の環境変数を設定するだけで外に出られるので楽。
      具体的にはこんな感じ。

      • $ export http_proxy=http://192.168.100.200:12345
      • $ export https_proxy=https://192.168.100.200:54321

      しかし docker は環境変数の設定だけでは外に出られない。
      具体的には docker pull ができなかった。
      docker pull はデフォルトだと https で docker.io に image を取るので引っかかる。


      環境

      • Ubuntu 16.04 LTS
      • Docker: 1.5-1

      proxy 設定

      素直に公式のドキュメントを見る。
      具体的には
      • $ mkdir -p /etc/systemd/system/docker.service.d
      • $ vi /etc/systemd/system/docker.service.d/http-proxy.conf
        • [Service]
        • Environment="HTTP_PROXY=http://192.168.100.200:12345"
        • [Service]
        • Environment="HTTPS_PROXY=https://192.168.100.200:54321"
      でOK。
      systemctl restart docker をすると proxy 経由で pull ができるようになります。


      参考

      2017/12/03

      Ruby を使って Kobo の情報を取得する #okinawarb

      この記事は Okinawa.rb Advent Calendar 2017 3日目の記事です。
      2日目は @_atton さんの「amazon-ecs を使って Kindle マンガの情報を取得する」でした。
      というか私ですね。連投です。


      経緯

      しかし Amazon Advertising API の利用は却下されてしまいました。
      取ってしまったドメインを何とか活用しようと思ったログです。


      どうして kobo なのか

      当初は BookWalker か honto あたりで同じことをする予定でした。
      しかし BookWalker ではそれらしきものは無し。
      honto は完全に更地でした(これが本家かは不明)。
      ということで両方とも無理。

      困っていたら本関連のAPI まとめを発見。
      軽く見ていると、リンクは辿れませんが楽天のAPIがあります。
      楽天と言えば kobo があることを思いだす。

      なので kobo の API が無いかなー、と思って探すとありました。
      ドメイン取っちゃったし、何らかのコンテンツを提供するために使うことにしました。


      Rakuten Developers 登録

      Amazon Advertising API と同様にまずは token を手に入れるところから。
      developer 向けページでアカウントを作成。
      New App で Application を作ります。なんだか Twitter みたいですね。
      そうしたら
      • (Application|Developer) ID
      • application secret
      • Affiliate ID
      が発行されます。
      これらのパラメタを使ってリクエストを組み立てることになります。


      厚い無料本の山

      API endpoint は https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426 です。
      これに対して post すれば情報が手に入る。
      日付が入ってるのが気になる。リリース日とかなのだろうけれど。
      詳細は楽天Kobo電子書籍検索APIにありますが、いくつかの条件を付与可能。

      無料本は sort='+itemPrice' とかすると出てくるので問題は無い。
      しかし、 minimum_price 相当が無いっぽい。これは痛い。
      加えて、kobo には大量の本が登録されているので、sort='+itemPrice' とかしてると有料の本まで取得できない。
      具体的には 30 * 10 とかしても無料のものばかり。
      分冊版とかおためし版とか青空文庫があるのが原因な気もします。

      その辺をフィルタすると50冊くらいにになる。が、無料のものしか無いのは変わらず。
      頭が痛い例としては、ユーザアンケート調査が本として登録されているとか。

      無料本の何が問題かと言うと、報酬面。
      アフィリエイトは有料本を買ってもらわないと報酬が発生しないので、無料本を買って貰っても報酬ゼロ。
      なのでマネタイズができない。困った。
      結局 ebook-comic.info のドメインは取ったものの、どうしようかは考え中です。
      何かアイデアあればください。


      ドキュメントについて

      ちなみに、ドキュメントは Kobo の方が断然良い。
      実際、誰かのブログを見ずに公式ドキュメントだけでリクエストを作れた。
      Amazon Advertising API は微妙で、まずドキュメントはログインしないと見られない。
      その上、ドキュメントの記述とレスポンスが違ったりする。つらい。
      大抵 body にエラーが書いてあるので読めば問題は対処は可能ですが。


      リクエストのサンプルコード

      なお、koboのリクエスト例はこんな感じ。
      1リクエストで30個(Amazonは10個)取れたりと都合が良いところも多いのです。
      しかし、私の周辺では kobo を使っている人を見たことがない……


      まとめ

      とりあえず無料本を取得するところまではできました。
      しかし affiliate の収入が絶望的なので使わない気もする。

      ということで Okinawa.rb Advent Calendar 3日目の記事でした。
      なお、クリスマスプレゼントはこちらで募集しています。よろしくね。

      明日の担当は @_simanman さんです。


      環境

      • OS: Ubuntu 16.04.3 LTS 
      • ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]


      参考

      2017/12/02

      amazon-ecs を使って Kindle マンガの情報を取得する #okinawarb

      この記事は Okinawa.rb Advent Calendar 2017 2日目の記事です。
      1日目は @hanachin さんの「Rubyで国民健康保険料を計算する」でした。

      Amazon は Product Advertising API というものを提供していて、商品を検索したりできます。
      利用するためには affiliate.amazon.co.jp への登録が必要です。
      加えて、 Advertising API を使うサイトなども申請する必要があります。
      ちなみに登録に関してはにはこちらの記事が有用です。

      Product Advertising API の token を取得したので、いざ商品検索。
      具体的にはこちらを参考にしつつ書き始めましたが、この記事では商品検索リクエスト(item_search)を使っています。
      私は検索ではなく「特定の値段以下のKindle本」が欲しいので、send_request で直接リクエストを作ることにしました。

      とは言え実行するアクションは「ItemSearch」なので検索に相当します。
      なお、 Advertising API は「特定のノード以下の情報を検索」ができます。
      browse_node: 2293143051 というマジックナンバーがそれです。
      2293143051 は Kindle book store のノードのようです。
      Amazon本家のサイトの「Kindle ストア」にカーソルを合わせたりすると URL に含まれていて、他にも大量にあります。

      さて、リクエストの目星が付いたので実行してみましょう。
      あれ。取れていませんね。何故だろう。

      デバッグのために request を inspect したりして request の URI を取得。
      その上参考記事の URI と比較すると、どうやら amazon.com に request を送っているようです。
      (ここはエラーの詳細を書きたかったのですが、BANされたので割愛)
      ということで marketplace: 'ja' を追加すると amazon.co.jp にリクエストを送るようになりました。
      これで無料の Kindle 本を取得できました。


      まとめ

      amazon-ecs を使って無料の Kindle 本を集めることができました。
      私はやってないのですが、これを購入する部分まで書くと素敵なことになりそうですね。

      ということで Okinawa.rb Advent Calendar 2日目の記事でした。
      なお、クリスマスプレゼントはこちらで募集しています。
      明日の担当は @_atton さんです。というか私です。そして3日目の記事はこちら。


      環境

      • OS: Ubuntu 16.04.3 LTS 
      • ruby: 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]
      • rubygems: 2.6.13
      • amazon-ecs: 2.5.0


      参考

      2017/11/22

      Ubuntu 16.04 + Nginx + Let's Encrypt で https 化する

      基本的には表題の通り。
      というかもともと certbot というものがあって、対話的に質問に答えるだけで設定が終わります。
      一応ログとして残す、くらいで。
      最初の頃は letsencrypt コマンドを直叩きしてたのですが、certbot が楽でした。
      certbot は http -> https への Redirect configuration まで入れてくれる。便利。みたいな話。
      ちなみに https 化したサイトは Kindle格安マンガまとめ と Kindle 無料マンガまとめ です。


      環境

      • Ubuntu 16.04 LTS
      • certbot: 0.19.0
      • letsencrypt: 0.19.0


      コマンド

      • # add-apt-repository ppa:certbot/certbotapt-get
        • ENTER
      • # apt-get update
      • # apt-get install -y python-certbot-nginx
      • # vi /etc/nginx/sites-available/default
        • server_name _;
        • を
        • server_name kindle-comic.info
        • とかに。適宜自分のドメインに置き換えてください。
      • # nginx -t
        • で syntax check できます。
      • # certbot --nginx -d kindle-comic.info
        • mail address とか聞かれる
        • terms and condition に同意するかどうか。アグリーってやつだ。
        • メールアドレスを公開するか。No かなー。
        • http -> https の Redirect をするか。もちろんするので2を選択。
      • # systemctl restart nginx
        • これで https 化完了


      おまけ

      certbot 楽で良い。おまかせなのが逆に難点かもだけれど。
      nginx の configuration 書いたこと無い身としてはありがたかった。
      ちなみに、 Let's Encrypt で取れる証明書は有効期間が3ヶ月らしい。
      ので、だいたいの人が自動更新するよう cron に書くようですね。
      私はこんな感じかな。
      • # crontab -e

      あと AWS の EC2 を使っていたら Security Group で Inbound の 443 を空けるのを忘れないように。
      ということで、Kindle格安マンガまとめ と Kindle 無料マンガまとめ を https 化した話でした。みんな使ってねー。


      参考

      2017/11/13

      Ubuntu 16.04 LTS で NeoVim を使う

      AWS の EC2 インスタンスに Ubuntu 16.04 があったので使ってみる。
      環境構築の中で NeoVim のインストールと設定をしたログ。


      環境

      • OS: Ubuntu 16.04.3 LTS
      • apt: 1.2.24
      • NeoVim: 0.2.0
      • Ruby: 2.3.1p112
      • neovim gem: 0.6.1
      • Python2: 2.7.12
      • pip2: 8.1.1
      • python2-neovim: 0.2.0
      • Python3: 3.5.2
      • pip3: 8.1.1
      • python3-neovim: 0.2.0


      NeoVim 本体をインストール

      • # apt-get install -y software-properties-common python-software-properties
      • # add-apt-repository ppa:neovim-ppa/stable
        • Enter 押す必要があったけれど -y とか付けたら良かったのかな
      • # apt-get update
      • # apt-get install neovim
      で neovim 本体は入ります。楽で良い。


      dot_files を設定する

      私は dot_files を公開しているので
      • git clone https://github.com/atton/dot_files
      • cd dot_files
      • ./install.sh
      で設定終了。備えあれば何とやら。


      NeoVim の環境を整える

      私が使ってるプラグインが python3 必須だったりするのでその辺も整備。
      • # apt-get install -s ruby bundler
      • # gem install neovim
      • # apt-get install -y python3 python3-dev python3-pip python python-dev python-pip
      • # pip3 install neovim
      • # pip install neovim
      で python2 + python3 + ruby の環境が整った。
      :CheckHealth すると clipboard が無い以外は問題無い、とのことでOK。
      自己診断機能便利ですよね。 brew doctor とか。


      おまけ

      ec2 の IP 覚えるとか domain 振るのとか面倒なので私の ~/.ssh/config はこんな感じ。
      というかOSごとに default user name 違うってなんでやねん。