2017年3月9日木曜日

vim:今日のvimrc

●vimrc


" 全角スペースを可視化
if has('syntax')
  syntax enable
  function! ActivateInvisibleIndicator()
    highlight ZenkakuSpace cterm=underline ctermfg=Blue gui=underline guifg=Blue
    match ZenkakuSpace / /
  endfunction
  augroup InvisibleIndicator
    autocmd!
    autocmd BufEnter * call ActivateInvisibleIndicator()
  augroup END
endif

2017年2月13日月曜日

CentOSにluaを有効にしたvimをインストール

●概要

vimでneocompleteを使いたいため。
ググれば星の数ほど出てきますが私も書いておきます。
/usr/localに置くと全部に影響がでてちょっといやな思いをしたので、ユーザーホームディレクトリに置きます。

●手順

準備作業。

#sudo yum remove vim-enhanced   # 消さない
sudo yum install lua-devel ncurses-devel
Rubyを有効化する場合、--with-ruby-commandオプションは必要で、rbenvでインストールした場所を 設定するのが良いよう。
# sudo su -
mkdir vim
cd vim
git clone https://github.com/vim/vim.git
cd vim/
git pull
make distclean
./configure \
    --prefix=/home/itman \
    --with-features=huge \
    --enable-multibyte \
    --enable-rubyinterp \
    --enable-luainterp \
    --enable-cscope \
    --enable-fail-if-missing \
    --with-ruby-command=/home/itman/.rbenv/shims/ruby
make
make install

エリアスの定義
#sudo ln -s /usr/local/bin/vim /usr/bin/vim
alias vi='~/bin/vim'
alias vim='~/bin/vim'

●参考サイト


CentOS7でluaを有効にしたVimに入れ替える

vim:今日のvimコマンド

 

 ●vimrc

" タブ文字などを可視化する
set list
set listchars=tab:>.,extends:<,trail:_

"vim起動オプションに-u をつけて独自のvimrcを読ませる
"vimrcには以下のように書く
source $VIM/vimrc
source $VIM/_vimrc

augroup AutoOpen
    au!
    " 画面を横分割しながらファイルを3つ開く
    au VimEnter * e $VIM/_vimrc
    au VimEnter * rightbelow split C:\work\file01.txt
    au VimEnter * rightbelow split C:\work\file02.txt
    " 新しいタブを開きほかのファイルを開く
    au VimEnter * tabnew
    au VimEnter * e C:\gotowork\memo.txt
    au VimEnter * rightbelow split C:\gotowork\todo.txt
    au VimEnter * cd %:h
    " 新しいタブを開きファイラーを開く
    au VimEnter * tabnew
    au VimEnter * e .
    au VimEnter * rightbelow new
    au VimEnter * e .
augroup END

●コマンド

:scriptname ... プラグイン一覧の確認

 ... 分割ウィンドウの最大化
=     ... 分割ウィンドウを元に戻す
      ... タグジャンプ
      ... 直前のタグに戻る
      ... mswin.vimを有効にしている時の矩形選択モード

●プラグイン

" dbext
" 結構遅い
let g:dbext_default_ORA_bin = 'c:\\oracle\\ora112\\sqlplus'
let g:dbext_default_profile_TEST = 'type=ORA:user=scott:passwd=tiger:srvname=orcl'
let g:dbext_default_profile = 'TEST'

\slt  ... テーブルの一覧
\sdt  ... テーブルの詳細

2017年2月1日水曜日

vim:今日のvimコマンド

 

 ●vimrc

"ファイルタイプ別にインデント設定を変える
augroup FileTypeIndent
    autocmd BufNewFile,BufRead *.sql setlocal tabstop=2 shiftwidth=2 expandtab
augroup END

set noundofile   " undoファイルを作らない
set noswapfile   " swapファイルを作らない
set nobackup     " バックアップファイルを作らない

●コマンド

:ls  ... バッファのリスト
:buf [number] ... バッファを開く
:cd %:h ... カレントディレクトリを現在のファイルの置き場所に変更
:lcd    ... 現在のファイルにだけに効くcd
:r !date /t ... 日付挿入(win)
:e .     ... ファイラーモード
:e ファイル名 ... ファイルをバッファに入れる

ヤンクされた文字列でワードを置き換える方法
インサートモードで [C-r]0 でレジスタ0のヤンクが呼び出せる
cw => [C-r]0
でOK
クリップボード(のレジスタ)は*

●プラグイン

特になし。 デフォルトのファイラー(netrw)が悪くないのでvimfilerやunite.vimはいらないかも・・

2017年1月31日火曜日

gVIM

gVIM最強です。

https://www.kaoriya.net/

_vimrcに以下を入れると、vimなのにWindowsのごとくキーバインドになります。
違和感なし。これはよい。

" Windows key bind(Ctrl-C)
source $VIMRUNTIME/mswin.vim


さらに最近のVIMはneobundle等でプラグイン導入も楽々。
しばらくサクラエディタに浮気していましたが
もうテキストエディタはVIMで決まりですね。
メモリ消費量もサクラより軽いようですし。

会社も自宅もVIMにしました。

unite.vimやvimfilerでIDE的に使うことを画策中。

2016年12月11日日曜日

Raspberry Piセットアップ日記(18)ラズパイ3ようやく購入

 





遅ればせながら購入。しかも1か月ほど放置。このほどようやく組み立て・セットアップ完了。


2016年1月27日水曜日

Raspberry Piセットアップ日記(17)Oracle JDK8をインストール

●参考情報

Installing Oracle JDK 8 on Raspberry Pi
Ubuntu 14.04 で Oracle Java SE 7, Oracle Java SE 8 と OpenJDK 7 の共存

●概要手順

1、Oracle JDKをダウンロード
2、tarボールを展開してインストール
3、update-alternativesでjavaを切り替え

●詳細手順 

 1、Oracle JDKをダウンロード
ここから。
http://www.oracle.com/technetwork/java/javase/downloads/index.html 

2、tarボールを展開してインストール
/optの下に移動。
$ tar zxf jdk-8u71-linux-arm32-vfp-hflt.tar.gz 
$ sudo mkdir /opt/java
$ sudo mv jdk1.8.0_71/ /opt/java/.
$ cd /opt/java
/opt/java $ sudo mv jdk1.8.0_71 jdk1.8.0
$ ls
jdk1.8.0
3、update-alternativesでjavaを切り替え
(1)現状確認
$ ls /usr/bin/javac
/usr/bin/javac
$ ls -l /usr/bin/javac
lrwxrwxrwx 1 root root 23  1月  1  1970 /usr/bin/javac -> /etc/alternatives/javac

(2)jdkをalternativesに登録
$ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0/bin/javac 100
$ sudo update-alternatives --install /usr/bin/java java /opt/java/jdk1.8.0/bin/java 100

(3)切り替え
$ sudo update-alternatives --config javac
alternative javac (/usr/bin/javac を提供) には 2 個の選択肢があります。

  選択肢    パス                                     優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/jdk-7-oracle-armhf/bin/javac   317       自動モード
  1            /opt/java/jdk1.8.0/bin/javac                100       手動モード
  2            /usr/lib/jvm/jdk-7-oracle-armhf/bin/javac   317       手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 1
update-alternatives: /usr/bin/javac (javac) を提供するために 手動モード で /opt/java/jdk1.8.0/bin/javac を使います
/opt/java $ sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。

  選択肢    パス                                        優先度  状態
------------------------------------------------------------
* 0            /usr/lib/jvm/jdk-7-oracle-armhf/jre/bin/java   317       自動モード
  1            /opt/java/jdk1.8.0/bin/java                    100       手動モード
  2            /usr/lib/jvm/jdk-7-oracle-armhf/jre/bin/java   317       手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 1
update-alternatives: /usr/bin/java (java) を提供するために 手動モード で /opt/java/jdk1.8.0/bin/java を使います

(4)バージョン確認
$ javac -version
javac 1.8.0_71
$ java -version
java version "1.8.0_71"
Java(TM) SE Runtime Environment (build 1.8.0_71-b15)
Java HotSpot(TM) Client VM (build 25.71-b15, mixed mode)
$ 

2015年7月23日木曜日

MySQLを読む(1) ソースコードからのビルド

MySQLのソースコードを読む。

参考:詳解MySQL オライリー Sasba Pacbev著/伊藤直也、田中慎司、吉川英興 監訳/菅野良二訳

目標:
・SQLパーサー&オプティマイザ部分の理解

ビルド参考:
開発ソースツリーを使用して MySQL をインストールする

環境はAWS EC2 t1.microインスタンス

1、ソースの取得


[centos@mirage mysql-server]$ git clone https://github.com/mysql/mysql-server.git
[centos@mirage mysql-server]$ git branch -r
  origin/5.5
  origin/5.6
  origin/5.7
  origin/HEAD -> origin/5.7
  origin/cluster-7.2
  origin/cluster-7.3
  origin/cluster-7.4
[centos@mirage mysql-server]$ git branch
  5.6
* 5.7

2、ビルド環境の準備


動きを追うためデバッグオプションつきでビルド。

[centos@mirage mysql-server]$ cd bld_debug/
[centos@mirage bld_debug]$ cmake .. -DCMAKE_BUILD_TYPE=Debug
-- Running cmake version 2.8.11
-- Found Git: /usr/bin/git (found version "1.8.3.1") 
-- Configuring with MAX_INDEXES = 64U
-- The C compiler identification is GNU 4.8.3
-- The CXX compiler identification is GNU 4.8.3
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for SHM_HUGETLB
-- Looking for SHM_HUGETLB - found
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of void *
-- Check size of void * - done
-- SIZEOF_VOIDP 8
-- MySQL 5.7.7-rc
-- Packaging as: mysql-5.7.7-rc-Linux-x86_64
-- Looked for boost/version.hpp in  and 
-- BOOST_INCLUDE_DIR BOOST_INCLUDE_DIR-NOTFOUND
-- LOCAL_BOOST_DIR 
-- LOCAL_BOOST_ZIP 
-- Could not find (the correct version of) boost.
-- MySQL currently requires boost_1_57_0

CMake Error at cmake/boost.cmake:76 (MESSAGE):
  You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=

  This CMake script will look for boost in .  If it is not there,
  it will download and unpack it (in that directory) for you.

  If you are inside a firewall, you may need to use an http proxy:

  export http_proxy=http://example.com:80

Call Stack (most recent call first):
  cmake/boost.cmake:228 (COULD_NOT_FIND_BOOST)
  CMakeLists.txt:452 (INCLUDE)


-- Configuring incomplete, errors occurred!

こけた
5.7ではboostが必要らしい

最新版にはこだわらないので5.6に切り替えてリトライ

[centos@mirage bld_debug]$ pwd
/home/centos/mysql-server/bld_debug
[centos@mirage bld_debug]$ cd ..
[centos@mirage mysql-server]$ git checkout 5.6
Switched to branch '5.6'
[centos@mirage mysql-server]$ 

[centos@mirage mysql-server]$ cd bld_debug/
[centos@mirage bld_debug]$ cmake .. -DCMAKE_BUILD_TYPE=Debug
-- Running cmake version 2.8.11
-- Found Git: /usr/bin/git (found version "1.8.3.1") 
-- Configuring with MAX_INDEXES = 64U
-- The C compiler identification is GNU 4.8.3
-- The CXX compiler identification is GNU 4.8.3
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
........................省略
-- Check size of wint_t - done
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:128 (FIND_CURSES)
  cmake/readline.cmake:202 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:409 (MYSQL_CHECK_EDITLINE)


-- Configuring incomplete, errors occurred!

こけた

cursesインストール

$ sudo yum install ncurses-devel

リトライ

[centos@mirage bld_debug]$ rm -rf *
[centos@mirage bld_debug]$ cmake .. -DCMAKE_BUILD_TYPE=Debug
-- Running cmake version 2.8.11
-- Found Git: /usr/bin/git (found version "1.8.3.1") 
-- Configuring with MAX_INDEXES = 64U
-- The C compiler identification is GNU 4.8.3
-- The CXX compiler identification is GNU 4.8.3
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
........................省略
-- Library mysqlclient depends on OSLIBS -lpthread;m;dl
-- Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source.
-- If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://example.com:80
-- Library mysqlserver depends on OSLIBS -lpthread;m;crypt;dl
-- CMAKE_BUILD_TYPE: Debug
-- COMPILE_DEFINITIONS: HAVE_CONFIG_H
-- CMAKE_C_FLAGS:  -Wall -Wextra -Wformat-security -Wvla -Wwrite-strings -Wdeclaration-after-statement -Werror
-- CMAKE_CXX_FLAGS:  -Wall -Wextra -Wformat-security -Wvla -Woverloaded-virtual -Wno-unused-parameter -Werror
-- CMAKE_C_FLAGS_DEBUG: -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DENABLED_DEBUG_SYNC
-- CMAKE_CXX_FLAGS_DEBUG: -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DENABLED_DEBUG_SYNC
-- Configuring done
-- Generating done
-- Build files have been written to: /home/centos/mysql-server/bld_debug

できた

3、ビルド実行


[centos@mirage bld_debug]$ make
Scanning dependencies of target INFO_BIN
[  0%] Built target INFO_BIN
Scanning dependencies of target INFO_SRC
[  0%] Built target INFO_SRC
Scanning dependencies of target abi_check
[  0%] Built target abi_check
Scanning dependencies of target zlib
[  0%] Building C object zlib/CMakeFiles/zlib.dir/adler32.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/compress.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/crc32.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/deflate.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/gzio.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/infback.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/inffast.c.o
[  0%] Building C object zlib/CMakeFiles/zlib.dir/inflate.c.o
........................省略
Scanning dependencies of target mysql_client_test_embedded
[ 98%] Building C object libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/__/__/tests/mysql_client_test.c.o
Linking CXX executable mysql_client_test_embedded
[ 98%] Built target mysql_client_test_embedded
Scanning dependencies of target mysql_embedded
[ 98%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/completion_hash.cc.o
[ 99%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/mysql.cc.o
[ 99%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/readline.cc.o
Linking CXX executable mysql_embedded
[ 99%] Built target mysql_embedded
Scanning dependencies of target mysqltest_embedded
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/__/__/client/mysqltest.cc.o
Linking CXX executable mysqltest_embedded
[100%] Built target mysqltest_embedded
Scanning dependencies of target my_safe_process
[100%] Building CXX object mysql-test/lib/My/SafeProcess/CMakeFiles/my_safe_process.dir/safe_process.cc.o
Linking CXX executable my_safe_process
[100%] Built target my_safe_process

できた
大体7~8分程度 10分はかかってないと思う

4、テスト


[centos@mirage bld_debug]$ make test
Running tests...
Test project /home/centos/mysql-server/bld_debug
      Start  1: hp_test1
 1/21 Test  #1: hp_test1 .........................   Passed    0.01 sec
      Start  2: hp_test2
 2/21 Test  #2: hp_test2 .........................   Passed    0.53 sec
      Start  3: pfs_instr_class
 3/21 Test  #3: pfs_instr_class ..................   Passed    0.01 sec
      Start  4: pfs_instr_class-oom
 4/21 Test  #4: pfs_instr_class-oom ..............   Passed    0.01 sec
      Start  5: pfs_instr
 5/21 Test  #5: pfs_instr ........................   Passed    0.01 sec
      Start  6: pfs_instr-oom
 6/21 Test  #6: pfs_instr-oom ....................   Passed    0.01 sec
      Start  7: pfs_account-oom
 7/21 Test  #7: pfs_account-oom ..................   Passed    0.01 sec
      Start  8: pfs_host-oom
 8/21 Test  #8: pfs_host-oom .....................   Passed    0.01 sec
      Start  9: pfs_user-oom
 9/21 Test  #9: pfs_user-oom .....................   Passed    0.01 sec
      Start 10: pfs
10/21 Test #10: pfs ..............................   Passed    0.73 sec
      Start 11: pfs_connect_attr
11/21 Test #11: pfs_connect_attr .................   Passed    0.11 sec
      Start 12: regex1
12/21 Test #12: regex1 ...........................   Passed    0.01 sec
      Start 13: regex2
13/21 Test #13: regex2 ...........................   Passed    0.00 sec
      Start 14: regex3
14/21 Test #14: regex3 ...........................   Passed    0.00 sec
      Start 15: queues_test
15/21 Test #15: queues_test ......................   Passed    0.29 sec
      Start 16: simple
16/21 Test #16: simple ...........................   Passed    0.32 sec
      Start 17: skip
17/21 Test #17: skip .............................   Passed    0.00 sec
      Start 18: todo
18/21 Test #18: todo .............................   Passed    0.00 sec
      Start 19: skip_all
19/21 Test #19: skip_all .........................   Passed    0.00 sec
      Start 20: no_plan
20/21 Test #20: no_plan ..........................   Passed    0.00 sec
      Start 21: basic
21/21 Test #21: basic ............................   Passed    0.00 sec

100% tests passed, 0 tests failed out of 21

Total Test time (real) =   2.14 sec
[centos@mirage bld_debug]$ 



できた


5、デバッガインストール

動作を確認するためにデバッガを入れておく

$ sudo yum install gdb

2015年7月22日水曜日

CentOS7 on Amazon EC2(4) ホスト名変更

参考

CentOS7のAMIから起動したインスタンスのホスト名を固定にする →OK

Linux インスタンスのホスト名の変更 →ダメ

CentOS 7 の Hostname を変更する →ダメ


やり方

/etc/hostnameや/etc/sysconfig/networkにホスト名を書いてもダメ。
/etc/cloud/cloud.cfgのupdate_hostnameをコメントアウトした上で、/etc/hostnameをいじる。


$ sudo vi /etc/cloud/cloud.cfg
$ sudo vi /etc/hostname
$ sudo reboot



2015年7月19日日曜日

CentOS7 on Amazon EC2(3) glassfish on amazon ec2

Amazon EC2上のCentOS7にglassfishをインストールする。

1、JDK8ダウンロード、インストール

yumのリポジトリにはjavac入りのJDKはない模様
sudo yum provides javac

以下サイトからOracle JDKをインストールする
http://www.oracle.com/technetwork/java/javase/downloads/index.html

(1)コマンドラインからダウンロード

参考:Think deeply, Do less, More effective

$ sudo yum install wget -y
$ wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.rpm"

(2)インストール

$ sudo rpm -ivh jdk-7u71-linux-x64.rpm 

2、glassfish ダウンロード&インストール

参考:【Glassfish】CentOS7.0へGlasssfish4.1インストール

(1)ダウンロード

サイト:https://glassfish.java.net/download.html

Full Platformをダウンロードする。

コマンド
$ wget http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip

(2)glassfish起動ユーザー追加

$ sudo useradd glassfish

(3)解凍&インストール

$ sudo yum install unzip -y
$ sudo su - glassfish
glassfish$ unzip glassfish-4.1.zip
glassfish$ mv glassfish4 /opt/.

3、起動テスト&セキュア設定

$ cd /opt/glassfish4/bin
$ ./asadmin change-admin-password --user admin
Enter the admin password> 
Enter the new admin password> 
Enter the new admin password again> 
Command change-admin-password executed successfully.
$ ./asadmin start-domain
$ ./asadmin enable-secure-admin
Enter admin user name>  admin
Enter admin password for user "admin"> 
You must restart all running servers for the change in secure admin to take effect.
Command enable-secure-admin executed successfully.
$ ./asadmin stop-domain
Waiting for the domain to stop ..
Command stop-domain executed successfully.
$ ./asadmin start-domain
Waiting for domain1 to start ...............................................................
Successfully started the domain : domain1
domain  Location: /home/pi/glassfish4/glassfish/domains/domain1
Log File: /home/pi/glassfish4/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.

4、サービス作成

$ sudo vi /lib/systemd/system/glassfish.service
[Unit]
Description=GlassFish Server
After=network.target remote-fs.target

[Service]
Type=forking
PIDFile=/opt/glassfish4/glassfish/domains/domain1/config/pid
ExecStart=/opt/glassfish4/bin/asadmin start-domain
ExecReload=/opt/glassfish4/bin/asadmin restart-domain
ExecStop=/opt/glassfish4/bin/asadmin stop-domain
TimeoutStartSec=300
TimeoutStopSec=30
User=glassfish

[Install]
WantedBy=multi-user.target

5、サービス有効化

$ sudo systemctl enable glassfish.service
ln -s '/usr/lib/systemd/system/glassfish.service' '/etc/systemd/system/multi-user.target.wants/glassfish.service'

6、停止・起動

$ sudo systemctl stop glassfish.service
$ sudo systemctl start glassfish.service

7、ログを確認

less /var/log/messages

2015年7月18日土曜日

CentOS7 on Amazon EC2(2) MySQL

CentOS7では、mariaDBなるDBになっているらしい!
Wikipedia MariaDB

1、インストール

mysqlをインストールしようとするとmariadbがインストールされる

$ sudo yum install mysql
Loaded plugins: fastestmirror
....
Dependencies Resolved

================================================================================
 Package             Arch          Version                    Repository   Size
================================================================================
Installing:
 mariadb             x86_64        1:5.5.41-2.el7_0           base        8.9 M
Installing for dependencies:
 mariadb-libs        x86_64        1:5.5.41-2.el7_0           base        754 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 9.7 M
Installed size: 53 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): mariadb-libs-5.5.41-2.el7_0.x86_64.rpm              | 754 kB   00:00     
(2/2): mariadb-5.5.41-2.el7_0.x86_64.rpm                   | 8.9 MB   00:00     
--------------------------------------------------------------------------------
Total                                               12 MB/s | 9.7 MB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-libs-5.5.41-2.el7_0.x86_64                         1/2 
  Installing : 1:mariadb-5.5.41-2.el7_0.x86_64                              2/2 
  Verifying  : 1:mariadb-5.5.41-2.el7_0.x86_64                              1/2 
  Verifying  : 1:mariadb-libs-5.5.41-2.el7_0.x86_64                         2/2 
Installed:
  mariadb.x86_64 1:5.5.41-2.el7_0                                               
Dependency Installed:
  mariadb-libs.x86_64 1:5.5.41-2.el7_0                                          
Complete!

2、バージョン確認

$ mysql --version
mysql  Ver 15.1 Distrib 5.5.41-MariaDB, for Linux (x86_64) using readline 5.1
mariadbになっている

3、Serverインストール

$ sudo yum install mariadb-server

4、サービス確認

$ systemctl list-unit-files | grep mariadb
mariadb.service                        disabled
無効になっている

5、サービス有効化

$ sudo systemctl enable mariadb.service
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
$ systemctl list-unit-files | grep mariadb
mariadb.service                        enabled 

6、サービス起動

$ sudo systemctl start mariadb.service

CentOS7 on Amazon EC2(1) タイムゾーン変更

参考
すにぺっと
$ date
Sat Jul 18 13:25:12 UTC 2015
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
$ date
Sat Jul 18 22:25:17 JST 2015

2015年6月10日水曜日

glassfish windowsサービス化

windows7での手順。

●手順
1、asadmin create-service
2、環境変数などはglassfish\domains\domain1\bin\domain1Service.xmlに書く。
ex.
 <env name="AS_JAVA" value="C:\Program Files\Java\jdk1.7.0_51"/>

●参考
http://www.coppermine.jp/docs/programming/2011/11/glassfish-svc.html
http://treewoods.net/kugelblitz/?p=318

2015年6月5日金曜日

Docker on RHEL7

Dockerを試す。

●手順

1、RHEL7を入手
2、vmware player 6.0.6を入手、インストール。
3、vmを作成しRHELをインストール。
4、以下のサイトに従いDockerを試す。

今日からできるDocker on RHEL7
http://jp-redhat.com/migration/docker/article.html

Dockerイメージは、centos,rhel7両方でpull。

●問題点と解決策

上記サイトのとおりにやると、以下の点でハマる。
(1)ServerNameの設定
(2)/run/httpdが揮発する
順に見ていこう。

(1)ServerNameの設定

これは単純に/etc/httpd/conf/httpd.confのServerNameが設定されていないため
起動しないというもの。
httpd.confにIPなりホスト名なりを記述してOK。
ちなみにDockerでホスト名を指定して起動するには -h オプション。

(2)/run/httpdが揮発する

httpdのインストール時に/run/httpdというディレクトリができる。ここにはhttpdの共有情報が
おかれるようだが、/runがtmpfsにマウントされているため、コンテナ起動時に初期化されてしまう。
(dockerの仕様の模様)

/run mounted as tmpfs in container and causes changes in the directory to not be persistent
https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1194542

このサイトに詳細があるが、結局起動シェルを作ってその中でmkdirするしかない模様。
(ここまで試してない)

ただし大体感覚はわかってきたのでそのうち用途を考えて本格的に使おう。

●その他参考サイト


Dockerコマンドメモ
http://qiita.com/curseoff/items/a9e64ad01d673abb6866

Dockerによる仮想コンテナを試してみる(1日目)
http://ryo14-a.hatenadiary.jp/entry/2014/08/16/133125

Dockerfileとdocker buildコマンドでDockerイメージの作成 (1/2)
http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html



2015年3月29日日曜日

Raspberry Piセットアップ日記(16)バックアップからのリストア

ホームディレクトリにあった.profileなどの設定ファイルの類を誤って消してしまったので、システムバックアップからリストアする。

バックアップはddでとってある。

ddコマンドは以下のように実行している。
${fullname}はバックアップダンプのファイル名。

sudo dd bs=1M if=/dev/root of=${fullname}

1、ddからのリストア失敗


結論から言うと、ddからのリストアはうまくいかなかった。

(1)vmwareでリストア

まず、ddだとデバイスにしかリストアできないようなので、ファイル単位のリストアができない。
かといって今リストア用に使えるデバイスはないので、vmware上のlubuntuにリストアを試してみた。
こんな感じ。
sudo dd bs=1M if=./rootdd_20150318_030001.img of=/dev/sdb1

→リストアは成功したが、マウントできない。(ファイルシステムが不明、
といったメッセージが出た)


(2)ddしたファイルをマウントする

●参考

DDしたファイルをマウントする
http://sstea.blog.jp/archives/1012448522.html

以下、引用

ディスクイメージをマウントする
$ sudo kpartx -v -a /media/sf_shared/raspi.img
とすると、下記のような表示が出ると思います。
この時に表示された loop デバイスを使用します。(この例では loop0 を使用します)
add map loop0p1 (252:0): 0 260096 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 5177344 linear /dev/loop0 262144
下記のようにすることで、Raspberry Pi 用のディスクイメージの rootfs パーティションを /mnt/ にマウントできます。
$ sudo mount /dev/mapper/loop0p2 /mnt/

kpartxをインストールし、上記のようにしてみたが/dev/mapper上にloopデバイスが作られない・・

2、dumpへの切り替え

やはりdumpに切り替えることにする
dumpインストールしてdumpに切り替え。

●参考情報

http://tkn384.exblog.jp/20931402
http://itpro.nikkeibp.co.jp/article/COLUMN/20140414/550303/

●バックアップコマンド

sudo dump -0uf ${fullname} /dev/root

●リストアコマンド

sudo restore -rf rootdump_20150322_094054.dmp

カレントにdumpの内容が展開される

リストアまで確認して、OKになった。

2015年3月27日金曜日

Raspberry Piセットアップ日記(15)DLNAサーバー

●参考

Raspberry Pi をDLNAサーバーに
http://wp.developapp.net/?p=3219

UbuntuにminiDLNAをインストールしてSony BRAVIAで使う
http://bty.sakura.ne.jp/wp/archives/377

●minidlnaインストール
pi@raspberrypi ~ $ sudo apt-get install minidlna
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libgail-3-0 libnet-daemon-perl libplrpc-perl powermgmt-base
これを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
  libavformat53
以下のパッケージが新たにインストールされます:
  libavformat53 minidlna
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
553 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,330 kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main libavformat53 armhf 6:0.8.13-1+rpi1 [411 kB]
取得:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main minidlna armhf 1.0.24+dfsg-1 [143 kB]
553 kB を 1秒 で取得しました (406 kB/s)
以前に未選択のパッケージ libavformat53:armhf を選択しています。
(データベースを読み込んでいます ... 現在 76332 個のファイルとディレクトリがインストールされています。)
(.../libavformat53_6%3a0.8.13-1+rpi1_armhf.deb から) libavformat53:armhf を展開しています...
以前に未選択のパッケージ minidlna を選択しています。
(.../minidlna_1.0.24+dfsg-1_armhf.deb から) minidlna を展開しています...
man-db のトリガを処理しています ...
libavformat53:armhf (6:0.8.13-1+rpi1) を設定しています ...
minidlna (1.0.24+dfsg-1) を設定しています ...

●設定
sudo vi /etc/minidlna.conf で、media_dirを以下のように変更する

media_dir=/mnt/usbdisk1/shared/media

●起動
pi@raspberrypi ~ $ sudo service minidlna restart
[ ok ] Restarting DLNA/UPnP-AV media server: minidlna.


●ポートあける
pi@raspberrypi ~ $ sudo ufw allow 8200/tcp
Rule added

●運用

  • 適当なDLNAクライアントをインストールしてスマホから確認。PCからなら、Windows Media PlayerでOK。
  • メディアディレクトリにファイルを追加しても基本自動認識されるようだが、フォルダの移動など大規模な変更をしたときはminidlnaを再起動したほうがいい。


2014年10月16日木曜日

Raspberry Piセットアップ日記(14)logger

logger:syslogにログを出力するコマンド。


シェルの標準出力をloggerに送るラッパーシェルを作ってみた。

cronで自動実行した際に、標準エラー出力に出力があったときだけメールされ、
通常時はログに吐くだけとなるようにしてみた。

・標準出力は、loggerに送る
・標準エラー出力は、loggerに送った上で、標準エラー出力にも冗長出力する
・コマンドライン
 logger_wrapper.sh シェル シェル引数

標準出力と標準エラー出力のパイプを分けるやり方は
試行錯誤の結果名前付きパイプにしてみた。
mktempで一時ファイルを使ってもいいだろう。

#!/bin/bash

if [ $# -lt 1 ]; then
        echo "argument not enough"
        exit 8
fi

THIS_NAME=`basename $0 .sh`
EXEC_NAME=`basename $1`
LOGGER_OPTS="-t ${EXEC_NAME}"

# create named pipe
PIPE=${THIS_NAME}_$$.pipe
mkfifo ${PIPE} 

# stderr logging (duplicate to stderr)
logger ${LOGGER_OPTS} -s -f ${PIPE} &

# execute program
$@ 2>${PIPE} | logger ${LOGGER_OPTS}

# cleanup
rm ${PIPE}

2014年9月28日日曜日

Raspberry Piセットアップ日記(13)UFW BLOCKメッセージ


気づいたら、/var/log/messagesに以下のようなメッセージが頻発していた。(1分に1回)

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
Sep 28 08:09:20 raspberrypi kernel: [1807898.640777] [UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

どうもブロードバンドルーターからの何らかのブロードキャストメッセージをブロックしている模様。
denyすることでログに吐かなくなるようだが、せっかくなのでどんなメッセージが飛んでいるのか
解析してみる。

1、syslogの見方

●参考
Linux LPIC - /var/log/messages
システムログの読み方を理解しよう
Raspberry Pi as a Syslog Server



以下のような読み方になるもよう

Sep 28 08:08:20 raspberrypi kernel: [1807838.540815] [UFW BLOCK] IN=..
+- timestamp -+ +- host --+ +-src-+ +-- msg body ..

カーネルが、[1807838...というメッセージを出力している、ということになる
"[1807838.540815]"という表記は、なんとなくタイムスタンプ(の別表現)のような感じなので、意味のある情報は
[UFW BLOCK]..以降だろう。

2、ufwの動作確認

ここで一度ufwの動作設定がどうなっているのかを確認する
ufwの動作状態確認

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
...以下略

3、UFW BLOCK以降のログの見方

[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=24734 PROTO=2 
[UFW BLOCK] IN=eth0 OUT= MAC=<文字列72桁(2)> SRC=<ルータIP> DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xA0 TTL=1 ID=2006 PROTO=2 

INは入力デバイスだろう。
OUTはoutgoingのメッセージではないので出ないのだろう。
MACは通常のMACアドレスにしては長い気がするのと、最後の2オクテットの値が違うのでただのMACアドレスではなさそうだが、とりあえず保留。
SRC以降は、IPヘッダの情報くさい。

IPパケットの基本構造

SRC=送信元IP ルータIP
DST=宛先IP 224.0.0.1
LEN=データグラム長、IPパケット全体の大きさ 32 理論的なIPパケットの最小は20bytes
TOS=サービスタイプ 0x00、指定なし
PREC=? 0xA0 とりあえず保留
TTL=寿命 1
ID=IPフラグメント(分割)が起こった時の識別子、通常ランダム 同じフラグメント(分割)されたパケットは同じ値になる 2006
PROTO=プロトコル番号 2 /etc/protocolsファイルによると「igmp(Internet Group Management)」

どうも、IGMPパケットのようだ。

4、IGMPとは?
Internet Group Management Protocol

Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、
マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。

LEN=32であることから、おそらくMembership Queryパケットである可能性が高い。
Membership Query (Type 0x11)
ホストがマルチキャストのグループへ参加するときにルータに送信される。参加しているグループの最新の状態を知りたいときにも送信される。

ただ、内容的には「ホストからルータへ投げられるパケット」であり、
今回のように「ルータからブロードキャストへ」投げられるパケットでは無い様に見受けられるので、解せない。

一方こちらでは
マルチキャスト編<第2回> IGMPを知る

どうも「グループの維持」のために、クエリパケットを60秒に1回投げられるらしい。
意味的にはルータが投げてもおかしくない(というかグループを管理するのはルータらしいのでルータが投げるのが正論だろう)、おそらくこいつだろう。

4、解決策
結論として、IGMPをallowにしてみようと思う。

●参考
Ubuntu で ufw を利用して ping を拒否する設定
KVMのインストールと設定
Question about UFW log entries

IGMPプロトコルそのものに設定することはできなさそう。
公式サイトでバグ報告上がってるがwishlistになっており
マルチキャスト設定で対応する旨書かれている

https://bugs.launchpad.net/ufw/+bug/946322


というわけで、以下のように実行し、ログが増えないことを確認して終了。

$ sudo ufw allow in from ルータIP to 224.0.0.0/8 
Rule added
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
5901                       ALLOW IN    Anywhere
..中略..
224.0.0.0/8                ALLOW IN    ルータIP

5、おまけ

ufwのヘルプ
$ ufw help


2014年9月23日火曜日

Raspberry Piセットアップ日記(12)repository.wolfram.com


●repository.wolfram.com
apt-updateするとrepository.wolfram.comがいないと言われ怒られる。

$ sudo apt-get update
...略...
ヒット http://mirrordirector.raspbian.org wheezy/rpi armhf Packages            
エラー http://repository.wolfram.com stable Release.gpg                        
  repository.wolfram.com:80 (140.177.204.60) へ接続できませんでした。 - connect (113: ホストへの経路がありません)
無視 http://repository.wolfram.com stable Release                              
エラー http://repository.wolfram.com stable/non-free armhf Packages            
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-ja_JP         
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-ja            
  repository.wolfram.com:http へ接続できません:
エラー http://repository.wolfram.com stable/non-free Translation-en            
  repository.wolfram.com:http へ接続できません:
無視 http://raspberrypi.collabora.com wheezy/rpi Translation-ja_JP             
...略...

raspberry piのフォーラムによると、最新のrespbianディストリではrepository.wolfram.comは
含まれていないとのこと
http://www.raspberrypi.org/forums/viewtopic.php?f=28&t=87501

workaroundに従い、wolfram.listをmv

$ cd /etc/apt/sources.list.d/
$ sudo mv wolfram.list wolfram.list.20140923bk1
$ sudo apt-get update
ヒット http://raspberrypi.collabora.com wheezy Release.gpg
ヒット http://mirrordirector.raspbian.org wheezy Release.gpg
...略...
無視 http://mirrordirector.raspbian.org wheezy/rpi Translation-en
パッケージリストを読み込んでいます... 完了
N: ディレクトリ '/etc/apt/sources.list.d/' の 'wolfram.list.20140923bk1' が無効なファイル名拡張子を持っているため、無視します

余計なメッセージが出ているようだが、いったん気にしないことにする