2017年3月22日水曜日

dyld: lazy symbol binding failed: Symbol not found: _mysql_get_client_info





$ rails s
dyld: lazy symbol binding failed: Symbol not found: _mysql_get_client_info
  Referenced from: /opt/local/lib/ruby/gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_get_client_info
  Referenced from: /opt/local/lib/ruby/gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Expected in: flat namespace

Trace/BPT trap: 5






http://www-jp.mysql.com/downloads/mysql/



Mac OS X ver. 10.7 (x86, 64-bit), DMG Archive5.6.10155.9M
(mysql-5.6.10-osx10.7-x86_64.dmg)MD5: 4b9e8063d8cad6ca83a79a267078cad1 | Signature





cd /usr/local/mysql-5.6.10-osx10.7-x86_64

sudo ./bin/mysqld_safe &

mysql -u root -p

use mysql;

mysql> select user,host,password from user;
+------+-----------------+----------+
| user | host            | password |
+------+-----------------+----------+
| root | hogemac.local |          |
| root | 127.0.0.1       |          |
| root | ::1             |          |
|      | localhost       |          |
|      | hogemac.local |          |
+------+-----------------+----------+
5 rows in set (0.00 sec)





mysql> select user,host,password from user;
+------+-----------------+-------------------------------------------+
| user | host            | password                                  |
+------+-----------------+-------------------------------------------+
| root | localhost       | *hogehogeF | 
| root | hogemac.local |                                           | 
| root | 127.0.0.1       |                                           | 
| root | ::1             |                                           | 
|      | localhost       |                                           | 
|      | hogemac.local |                                           | 
+------+-----------------+-------------------------------------------+
6 rows in set (0.00 sec)

mysql> SET PASSWORD FOR root@localhost=PASSWORD('hogehoge');

mysql> delete from user where password="";


mysql> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *hojehoge |
+------+-----------+-------------------------------------------+
1 row in set (0.00 sec)



mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql -u root -p
password:XXXXX


sudo vi /etc/hostconfig
MYSQLCOM=-YES-

sudo /Library/StartupItems/MySQLCOM/MySQLCOM start



rails new rtest

cd rtest

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.6.10-osx10.7-x86_64/lib/libmysqlclient.18.dylib /opt/local/lib/ruby/gems/1.8/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle
ln -s /usr/local/mysql-5.6.10-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
sudo gem uninstall mysql2
sudo gem install mysql2 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

vi Gemfile

#gem 'sqlite3'
gem 'mysql2'

vi config/database.yml 

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: rtest_development
  pool: 5
  username: root
  password: hogehoge
  socket: /tmp/mysql.sock
test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: rtest_test
  pool: 5
  username: root
  password: hogehoge
  socket: /tmp/mysql.sock
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: rtest_production
  pool: 5
  username: root
  password: hogehoge
  socket: /tmp/mysql.sock


rails g scaffold user name:string email:string
rake db:create
rake db:migrate
rails  s
http://localhost:3000/users

bash 変数を返した変数の配列の使い方、配列変数を変数を返して初期化してみようのまき、もちろん参照も!!go

以下のようなファイルがあるとする。
$ cat t1.txt
ag,a1
bg,b1
cg,c1
dg,d1
eg,e1
ag,a1
ag,a2
ag,a2
ag,a3
ag,a1
ag,a2
ag,a1
ag,a4
ag,a3
bg,b1
bg,b4
bg,b3
bg,b6
bg,b3
cg,c1
cg,c3
cg,c4
dg,d2
dg,d3
dg,d2
dg,d6
eg,e2

CSVファイルですね。
1カラム目をグループID
2カラム目をメンバーID
とした時、グループIDとメンバーIDの重複をとりグループIDを配列変数としその変数に属するメンバーを代入(初期化)してみよう。

というシェルを考えて作成してみよう。

とこんな感じ
$ cat t1.sh
#!/bin/sh
IN_FILE=t1.txt
GID_LIST=" "
for f in `cat ${IN_FILE}|awk -F, '{print $1}' | sort | uniq `
do
PID=`echo -n |grep $f $IN_FILE | awk -F, '{print $2}' | sort | uniq`
eval $f="( $PID )"
GID_LIST="${GID_LIST} $f"
done
for f in ${GID_LIST}
do
eval echo ${f} \$\{\#${f}\[\@\]\} \$\{${f}\[\@\]}
done

こんな感じ!!

それじゃ実行してみよう!!

$sh t1.sh
ag 4 a1 a2 a3 a4
bg 4 b1 b3 b4 b6
cg 3 c1 c3 c4
dg 4 d1 d2 d3 d6
eg 2 e1 e2
$

結果の説明
スペース区切りのCSVファイル
1カラム目はグループID
2カラム目はメンバーの数
3カラム目以降は1カラム目のグループIDに属するメンバーIDのリスト

簡単な説明
配列変数のメンバー数を取り出すところ
 ${#ARRAY[@]}
ARRAYが変数fになっているので ${f} なるね!!
これをメンバー数#を指定
 ¥#${f}
配列全体を意味する [@] をくっつける。
 ¥#${f}¥[¥@¥]
順序よく説明するからエスケープさせるための ¥ がなぜそこに必要かわかってもらえると思います。
さ、次に全体を一つの変数として意味づけるための ${} で囲えるようにしよう。
 \$\{\#${f}\[\@\]\}
このままだとどうなるのか?
$ f=ag
$ ag=(a1 a2 a3 a4)
$ echo ${f}
ag
$ echo \$\{\#${f}\[\@\]\}
${#ag[@]}

さ、一瞬間抜けなechoが出ましたか?!
でも大丈夫、${#ag[@]} が出せるということは eval を使えばいい
$ eval echo \$\{\#${f}\[\@\]\}
4

さ、おじさんの解説は終わり。
またね!!

2013年9月27日金曜日


フルパスのファイル名をPATHとファイル名
拡張子とファイル名に分割する正規表現を試してみた。
もっと良い方法があるかも?!

シェルスクリプト
stimac:~ st$ cat test2.sh
#!/bin/bash
test_file=/Users/st/Desktop/rails3book-121108/chapter1/README.rdoc
echo ${test_file}
echo ${test_file} | sed 's/.*\///g'
echo ${test_file} | sed 's/\/[^/]*$//g'
echo ${test_file} | sed 's/.*\.//g'
echo ${test_file} | sed 's/.*\///g' | sed 's/\.[^.]*$//g'


実行結果

stimac:~ st$ sh test2.sh
/Users/st/Desktop/rails3book-121108/chapter1/README.rdoc
README.rdoc
/Users/st/Desktop/rails3book-121108/chapter1
rdoc
README
stimac:~ st$


BSDな人にはこんな方法もあるようだ?!

stimac:~ st$ cat test1.sh

#!/bin/sh

test_path="/Users/st/Desktop/rails3book-121108/chapter1/README.rdoc"

string_filename=${test_path##*/}
string_filename_without_extension=${string_filename%.*}
string_path=${test_path%/*}
string_extension=${test_path##*.}

echo ${string_filename}
echo ${string_filename_without_extension}
echo ${string_path}
echo ${string_extension}


実行結果

stimac:~ st$ sh test1.sh

README.rdoc
README
/Users/st/Desktop/rails3book-121108/chapter1
rdoc
stimac:chapter1 st$

こちらが正当なのだろう。
正規表現を覚えるか?
暗黙の使い方を覚えられれば苦労はないな。


2013年3月2日土曜日

MAC で日本語テキストファイルの文字数を調べる。


以下のコマンドで全角文字も1文字としての文字数が得られます。

iconv -t EUC-JP -f UTF-8 調べたいテキストファイル名 | wc | awk '{print $3/2}'

詳細は
wcではUTF-8の全角文字1文字が3となります。
単純に3で割るとアレレという数字になってしまいました。
これで完全とは言えませんがとりあえずコピペでお試しください。

原稿用紙に納めるとき、文章の整理が上手になった気がします。



2013年2月20日水曜日

fedora17 vmtool 3.7.9-101.fc17.x86_64

fedora17


vmwareで共有が見えない(使えない)時
vmtoolをインストールしてもツールが再コンパイルされないとき

vmtoolがうまくインストールできない。
vmtoolの共有が動作しない


vmware-tools-distrib がうまくインストールできない。

せっかちな人は
rootになって以下のコマンドを実行してください。

 (cd /usr/src/kernels/`uname -r`/include/linux;ln -s ../generated/uapi/linux/version.h);/usr/bin/vmware-config-tools.pl

しばらくはカーネルのバージョンがちょくちょく変わるのでシェルにしました。

ーーー詳細は

以下の様なカーネルのヘッダーを見つける事が出来ない、できていない。
ーー
Searching for a valid kernel header path...
The path "" is not a valid path to the 3.7.3-101.fc17.x86_64 kernel headers.
Would you like to change it? [yes]

--
症状、現象、原因を確認する

The path "" is not a valid
とカーネルのincludeパスが拾えていない。

現在のカーネルバージョンを確認する。
$ uname -r
3.7.6-102.fc17.i686
$ su
passwd:XXXXX

カーネルの確認
# ls /usr/src/kernels/
3.6.11-5.fc17.i686  3.7.3-101.fc17.i686  3.7.6-102.fc17.i686

64ビットの方はこんな感じ
 #  ls /usr/src/kernels/
3.6.11-5.fc17.x86_64  3.7.3-101.fc17.x86_64  3.7.6-102.fc17.x86_64

3.7.6-102.fc17.i686 がある事を確認する。

現在のカーネルのインクリュードを見つけるように強引に修正する。
# cd /usr/src/kernels/”unameで得られた値”/include/linux
$ uname -r
3.7.6-102.fc17.i686
この場合
# cd /usr/src/kernels/3.7.6-102.fc17.i686/include/linux

バージョンヘッダーをシンボリックリンクしてあげる。
# ln -s ../generated/uapi/linux/version.h

再構築 vmware-config-tools.pl を実行する。
/usr/local/bin か /usr/bin のどちらか 
# /usr/local/bin/vmware-config-tools.pl
か
# /usr/bin/vmware-config-tools.pl
のどちらかだと思う。

vmware-config-tools.pl を探して実行する。
私の場合は /usr/bin でした。
# find /usr -name vmware-config-tools.pl -print
ln -s ../generated/uapi/linux/version.h

実行
# /usr/bin/vmware-config-tools.pl
Initializing...

共有を設定して見えることを確認する。

今後もカーネルのバージョンが上がるたびに同様の問題が生じる可能性があるので、適宜カーネルのバージョンを読み替えて実行すればよいと思います。



2013年2月1日金曜日

MacでZipファイルにパスワードをかける。

MacでZipファイルにパスワードをかける。
# ls
foo.txt
# zip foo.zip foo.txt
# ls
foo.txt     foo.zip

パスワードをかける。

# ls
foo.txt     foo.zip

# zipcloak foo.zip
Enter password:XXXXX
Verify password:XXXXX
encrypting: foo.zip
# ls
foo.txt     foo.zip

最初からパスワードをかける。
# ls
foo.txt
# zip -e foo.txt

Enter password:XXXXX
Verify password:XXXXX
  adding: foo.txt ( deflated xxx)
# ls
foo.txt     foo.zip



2012年12月22日土曜日

fedra17 bind

Fedora17
bind9.9.2
open: /etc/named.conf: permission denied
--------
Dec 22 06:14:20 stsato named[19792]: ----------------------------------------------------
Dec 22 06:14:20 stsato named[19792]: BIND 9 is maintained by Internet Systems Consortium,
Dec 22 06:14:20 stsato named[19792]: Inc. (ISC), a non-profit 501(c)(3) public-benefit
Dec 22 06:14:20 stsato named[19792]: corporation.  Support and training for BIND 9 are
Dec 22 06:14:20 stsato named[19792]: available at https://www.isc.org/support
Dec 22 06:14:20 stsato named[19792]: ----------------------------------------------------
Dec 22 06:14:20 stsato named[19792]: adjusted limit on open files from 4096 to 1048576
Dec 22 06:14:20 stsato named[19792]: found 1 CPU, using 1 worker thread
Dec 22 06:14:20 stsato named[19792]: using 1 UDP listener per interface
Dec 22 06:14:20 stsato named[19792]: using up to 4096 sockets
Dec 22 06:14:20 stsato named[19792]: loading configuration from '/etc/named.conf'
Dec 22 06:14:20 stsato named[19792]: open: /etc/named.conf: permission denied
Dec 22 06:14:20 stsato named[19792]: loading configuration: permission denied
Dec 22 06:14:20 stsato named[19792]: exiting (due to fatal error)
----------
FEEL CHROOT

mkdir /var/named/etc
mv /etc/named.* !$
ln -s /var/named/etc/named.conf /etc/named.conf

#// named.conf in "/etc" modify "/var/named/etc"
sed -e "s/\/etc/\/var\/named\/etc/g" named.conf

chown root.named /var/named/etc/*
chmod 640 !$

----------
CHECK

systemctl status named
/usr/sbin/named -u named
tail -f /var/log/messages

rndc
nslookup