プレイヤーズ・ハイ

 雑多な日記

Neovim のインストール on RHEL 7 / CentOS 7 あと dein.vim とか

Neovim のインストール

Neovim 用の yum リポジトリー登録

$ sudo vi /etc/yum.repos.d/neovim.repo

[dperson-neovim]
name=Copr repo for neovim owned by dperson
baseurl=https://copr-be.cloud.fedoraproject.org/results/dperson/neovim/epel-7-$basearch/
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/dperson/neovim/pubkey.gpg
enabled=1
enabled_metadata=1

$ sudo yum install neovim

$ vi ~/.bashrc

alias vi='/bin/nvim'

dein.vim のインストール

$ mkdir -p ~/.cache/dein

$ cd ~/.cache/dein

$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh

$ sh ./installer.sh ~/.cache/dein

以下を ~/.vimrc or init.vim に貼り付け

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/home/ユーザー名/.cache/dein/repos/github.com/Shougo/dein.vim

" Required:
call dein#begin('/home/ユーザー名/.cache/dein')

" Let dein manage dein
" Required:
call dein#add('Shougo/dein.vim')

" Add or remove your plugins here:
call dein#add('Shougo/neosnippet.vim')
call dein#add('Shougo/neosnippet-snippets')

" You can specify revision/branch/tag.
call dein#add('Shougo/vimshell', { 'rev': '3787e5' })

" Required:
call dein#end()

" Required:
filetype plugin indent on

" If you want to install not installed plugins on startup.
"if dein#check_install()
"  call dein#install()
"endif

"End dein Scripts-------------------------

初回起動

$ vi -u ~/.vimrc or ~/.init.vim

:call dein#install()

.vimrc カスタマイズ

以下のように .vimrc をカスタマイズ

$ vi ~/.vimrc

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=/home/ユーザー名/.cache/dein/repos/github.com/Shougo/dein.vim

" Required:
call dein#begin('/home/ユーザー名/.cache/dein')

" Let dein manage dein
" Required:
call dein#add('Shougo/dein.vim')

" Add or remove your plugins here:
call dein#add('Shougo/neosnippet.vim')
call dein#add('Shougo/neosnippet-snippets')
call dein#add('vim-scripts/bash-support.vim')
call dein#add('tomasr/molokai')
call dein#add('cseelus/vim-colors-lucid')

" You can specify revision/branch/tag.
call dein#add('Shougo/vimshell', { 'rev': '3787e5' })

" Required:
call dein#end()

" Required:
filetype plugin indent on

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

"End dein Scripts-------------------------

" color scheme
colorscheme molokai

" syntax
syntax enable

" ---------- 基本設定 ----------
syntax enable                    " 構文ハイライト有効化
set number                       " 行番号表示
set showmatch                    " 対応括弧強調表示
set backspace=indent,eol,start   " backspaceを有効化

" ---------- タブ設定 ----------
set expandtab                    " ソフトタブ有効化
set tabstop=4                    " タブ文字幅はスペース 4 つ
set softtabstop=4                " ソフトタブ幅はスペース 4 つ
" set shiftwidth=4               " 自動で挿入されるインデントのスペース幅

" ---------- インデント ----------
" set autoindent                 " 改行時自動インデント
set noautoindent

" display settings
set number
set ruler
set list

" encoding
set encoding=utf8
set fileencoding=utf8

" cursor
set cursorline
set cursorcolumn

設定ファイルのコンバート

$ mkdir ~/.config

$ mkdir ~/.vim

$ ln -s ~/.vim ~/.config/nvim

$ ln -s ~/.vimrc ~/.config/nvim/init.vim

以上です!! 快適な Vim ライフを!!

追記 自分用メモ

原因が分からないのだが,カラースキーマ molokai が使えなくなることがあった.

" colorscheme molokai
colorscheme elflord

などとし,一旦別のカラースキーマを設定し,再度 molokai に戻すと直った.

エラーメッセージが埋もれてしまったので正確な原因は不明だが dein#recache_runtimepath() を実行すればよかったのかもしれない.

RHEL (CentOS) 7 における locale 設定

どうせメモるならブログ書こうかと.

ssh ログインすると

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

locale コマンド叩くと

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

色々調べて,/etc/sysconfig/i18n に以下を記述し再起動したけど直らない.

LANG=ja_JP.UTF-8
LC_CTYPE=ja_JP.UTF-8

結論 RHEL (CentOS) 7 系では,/etc/locale.conf に設定するのでした. (上記をそのまま書いて # source /etc/locale.conf で O.K.)

あと localectl コマンドっていうのが追加されたようです.ctl 好きやなー.

$ localectl status で現状確認

以上です!!

Chef 小ネタ その一

Chef Server の構築と運用についてブログを書こうと思っているものの、中々まとまって時間が取れないため、小ネタを 2 つほど紹介します。

knife-opc について

knife の設定を正しく終えている Chef Workstation 環境で knife opc コマンドが使えずに困っていた。 具体的には以下のとおり。

$ knife opc user list
ERROR: You authenticated successfully to https://CHEF_SERVER_NAME/organizations/CHEF_ORG_NAME as CHEF_ADMIN_NAME but you are not authorized for this action
Response:  missing read permission

knife.rb に chef_server_url も chef_server_root も正しく指定しているのに、だ。

以下を読むと分かるのだが、

chef/knife-opc https://github.com/chef/knife-opc

knife opc コマンド実行時は、pivotal という Chef Client 名で認証するようだ。

よって sudo chef gem install knife-opc しておいて、以下のコマンドで目的を達成できた。

$ sudo knife opc user list --key /etc/opscode/pivotal.pem --user pivotal

だが、上記のドキュメントにも書いてあるのだが、chef-server-ctl コマンドが knife opc コマンドの管理者としてのアクションのラッパーになっており、こちらを使用するのが推奨されている。 上記コマンドと同じことをしたいなら、以下のようにする。

$ sudo chef-server-ctl user-list

レシピにおける not_if "grep ..." の書き方

シェルでは以下のように grep できるとする。

$ grep 'export PATH="/opt/chefdk/embedded/bin:$PATH"' ~/.bash_profile
export PATH="/opt/chefdk/embedded/bin:$PATH"

ところがこれを bash resource のガード条件として以下のように not_if で書くと syntax error になる(syntax error, unexpected tLABEL)。

not_if "grep 'export PATH="/opt/chefdk/embedded/bin:$PATH"' ~/.bash_profile

解消法は、単純に、ダブルクォーテーションをエスケープするだけ。

not_if "grep 'export PATH=\"/opt/chefdk/embedded/bin:$PATH\"' ~/.bash_profile

Chef活用ガイド コードではじめる構成管理

Chef活用ガイド コードではじめる構成管理

  • 作者: 澤登亨彦,樋口大輔,クリエーションライン株式会社
  • 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
  • 発売日: 2014/04/25
  • メディア: 大型本
  • この商品を含むブログ (1件) を見る

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

あるディレクトリー配下にあるすべてのシンボリックリンクとそのリンク先の所有者を比較する

以下のシェルスクリプトでサクっと調べることができます。

使い方

$ sh check_owner_symlink_and_entity.sh ターゲットディレクトリー

$ sh check_owner_symlink_and_entity.sh /var/www/html

check_owner_symlink_and_entity.sh

#!/bin/sh

set -u

TARGET_DIR=$1

find ${TARGET_DIR} -type l > list

while read LINE
do
  TMP_ENTITY=`ls -l ${LINE} | cut -d '>' -f2 | sed 's/ //g'`

  ls -l ${TMP_ENTITY} > /dev/null 2>&1
  if [ ${?} != 0 ]; then
    ENTITY_PREFIX=${LINE%/*}
    ENTITY=${ENTITY_PREFIX}/${TMP_ENTITY}
  else
    ENTITY=${TMP_ENTITY}
  fi

  SYMLINK_OWNER=`ls -l ${LINE} | cut -d ' ' -f3,4`
  if [ -d ${ENTITY} ]; then
    ENTITY_OWNER=`ls -ld ${ENTITY} | cut -d ' ' -f3,4`
    if [ "${SYMLINK_OWNER}" = "${ENTITY_OWNER}" ]; then
      echo 'OK'
    else
      echo "NG  シンボリックリンク ${LINE} とリンク先の所有者が異なります"
    fi
  else
    ENTITY_OWNER=`ls -l ${ENTITY} | cut -d ' ' -f3,4`
    if [ "${SYMLINK_OWNER}" = "${ENTITY_OWNER}" ]; then
      echo 'OK'
    else
      echo "NG  シンボリックリンク ${LINE} とリンク先の所有者が異なります"
    fi
  fi
done < list

rm -f list

exit 0