WindowsとMacのSafariでブックマーク共有

Windows7上のSafariとMac OS X 10.7上のSafari(共にバージョン5.1)で、ブックマークを共有したかったのでやってみた。
クラウドだとか便利なソフトとかあるようだけど、何もインストールせずに実現してみた。

今回はメインで使ってるWindows7側のブックマークを、Macでも使いたかっただけなので、Mac側での変更は消える仕様。

まず、Windows7側でバッチファイルを書いた。(yubirdとかの部分はユーザ名なので適当に)

CD C:\Users\yubird\APPDATA\Roaming\Apple Computer\Safari
COPY /y Bookmarks.plist Z:\Safari\
COPY /y History.plist Z:\Safari\
COPY /y TopSites.plist Z:\Safari\

Zドライブは、Linuxのサーバで立ててるSambaをネットワークドライブとして割り当ててる。

で、このバッチファイルをスケジュール
スタートメニュー->アクセサリ->システムツール->タスクスケジューラ
で、タスクを作成。

適当な名前をつけて
トリガーは「アイドル時」、操作は「プログラムを開始」で作成したバッチファイルを指定、条件設定はそのままで作成。

次にMac側でサーバからファイルをコピーさせる

ホームに適当なディレクトリを作成してrsyncさせる。
crontab -eで、スケジュール作成

*/30 * * * * rsync -av --delete server_address:~/Sync/Safari/ ~/Sync/Safari/

あと、エディタがvimの場合は.vimrcに

set backupskip=/tmp/*,/private/tmp/*

を追加しておいて、crontab編集時のtmpファイル作成をさせないようにしないと、編集が反映されない。

で、Mac側のブックマークファイルをシンボリックリンクにする(当然Safariは終了させておく)

cd /Users/yubird/Library/Safari
rm Bookmarks.plist
rm History.plist
rm TopSites.plist
ln -s ~/Sync/Safari/Bookmarks.plist
ln -s ~/Sync/Safari/History.plist
ln -s ~/Sync/Safari/TopSites.plist

で、恐らく問題無し。

scpで指定アドレスを使用してコピーする

ルータにプロバイダが2本設定されていて、ローカルのIPアドレス毎にどちらを使うか振り分けている環境で、明示的にどちらを使うか振り分けたい事があったのでメモ。
具体的にはリモートに数十GBのファイルをUPしたいけど、うちで使っているOCNでは、一日に30GB以上のUPは規制対象なので、上手いことやりたいって感じ。

UbuntuでIPアドレスを複数設定してやる。
/etc/network/interfacesに記述。
bondingもしているので、ちょっと普通と記述が違うけど。

iface eth0 inet manual
iface eth1 inet manual

auto bond0
iface bond0 inet static
address 192.168.34.1
netmask 255.255.255.0
network 192.168.34.0
broadcast 192.168.34.255
gateway 192.168.34.100
slaves eth0 eth1
bond-mode 0
bond-miimon 100

auto bond0:0
iface bond0:0 inet static
address 192.168.34.2
netmask 255.255.255.0

eth0, eth1を束ねたbond0に2つのローカルアドレス(192.168.34.1, 192.168.34.2)
を設定してる。
設定したら、sudo /etc/init.d/networking restartか再起動で。

あとはルータ(ix2015)で

ip access-list secondary permit ip src 192.168.34.2/32 dest any

route-map ocn2 permit 10
  match ip address access-list secondary
  set interface FastEthernet0/0.2

みたいな事をしてやれば、192.168.34.2のローカルアドレスは、外部に出る時、2本目のプロバイダを使用する。

で、scpの方は簡単で

scp -o BindAddress=192.168.34.2 ./localfiles remote.address:~/

で出来た。ちなみにwgetでも –bind-addressで指定できるし、sshでも -b で出来る。

MySQLでエラーにぶちあたった

MySQLでエラーにぶちあたった。

バッチ処理をしていたのだけれど、MySQLサーバ側からエラーを返されてしまった。エラーの内容は以下の通り。

SQL sentence: insert into hoge from hogehoge;
Error message: Could not execute statement
Last executed query: insert into hoge from hogehoge;

Native code: 2006
Native message: MySQL server has gone away
mysql> show variables like '%timeout%' ;
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 28800 |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 28800 |
+----------------------------+-------+
10 rows in set (0.00 sec)

mysql> set global wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)

mysql> set global interactive_timeout=10;
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye
shell> mysql -h db -u user -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 477
Server version: 5.0.67-log Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like '%timeout%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 10    |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 10    |
+----------------------------+-------+
10 rows in set (0.00 sec)

途中、一度セションを切断しないと変数が変わっていることを確認できなかったので再接続した。

ちゃんと値が変わった。

ここで問題のバッチを再度走らせる。

SQL sentence: insert into hoge from hogehoge;
Error message: Could not execute statement

Last executed query: insert into hoge from hogehoge;
Native code: 1206
Native message: The total number of locks exceeds the lock table size

なんだかエラーの内容が変わってる気がする。

日本語のメールを端末で見るときに

メーラとの相性が悪いためgmailを利用している。だけれどもgmailからpopで取得に行く間隔がかなり広いため最新のメールをチェックするのが大変だったりする。

なのでメールをmtaが走ってる端末で確認することがしばしば。そういったときに直面する問題が文字コードの問題である。

おおよそ大多数の日本語を含むメールはJISコード(ISO-2022-JPとも呼ばれる、逆かな?)でエンコードされている。これをUTF-8に変換するコマンドを調べた。

まずはメールの文字コードを調べる。

shell> grep charset mailfile
Content-Type: text/plain; charset=iso-2022-jp

ここで出てきたcharsetの項目が文字コードになる。

これをiconvを利用して変換してやる。iconvの取り扱う文字コードのリストを調べる

shell> iconv -l | grep 2022

ISO-2022-JP CSISO2022JP
ISO-2022-JP-1
ISO-2022-JP-2 CSISO2022JP2
ISO-2022-CN CSISO2022CN
ISO-2022-CN-EXT
ISO-2022-KR CSISO2022KR
ISO-2022-JP-2004 ISO-2022-JP-3

で、実際にためす。

shell> cat mailfile | iconv -f ISO-2022-JP -t UTF-8 | more

略

ちゃんと見れた!

ix2015同士でOSPFをしゃべらせたけどうまく経路情報を交換出来なかった様子

ix2015同士でOSPFをしゃべらせたけどうまく経路情報を交換出来なかった様子。

今回の状況は、vpnのハブになっているルータが一台と、そこにつなぎに行っているルータが複数台ある。

このとき新規に追加されたルータがospfにて経路情報を取得できない、広告できない、という状況。

rt3(config)# show ip ospf interface
 Interface           IP address      Area       Type      Cost  State    Nbrs
 FastEthernet1/0.0   192.168.52.252  0          BROADCAST 1     BACKUP   1/1
 Tunnel0.0           - UNNUMBERED -  0          P-to-P    10    P-to-P   1/1
 Tunnel1.0           - UNNUMBERED -  0          P-to-P    10    P-to-P   1/1

 rt3(config)# show ip ospf neighbor
 Neighbor ID     Pri State      Age IP address      Uptime    Interface
 192.168.1.254  1   FULL/DR    3   192.168.1.254  0:17:24   FastEthernet1/0.0
 192.168.2.254  1   FULL/OTHER 2   192.168.2.254  0:17:33   Tunnel0.0
 192.168.3.254 1   EXSTART    5   192.168.3.254 0:00:14   Tunnel1.0

今回の件では、192.168.3.254のルータを新たに接続したが、このix2015がospfをうまくしゃべれていない様子。
show ip ospf neighborで表示されるStateがEXSTARTになっている。
さっくりググったらそれらしい情報が出てきた。

OSPF 隣接ルータが exstart/exchange state のままになる

この問題が最もよく発生するのは、シスコのルータと他のベンダーのルータとの間で OSPF を実行しようとしたときです。 近隣ルータのインターフェイスの Maximum Transmission Unit(MTU; 最大伝送ユニット)設定が一致していないときに、問題が発生します。 MTU が大きい側のルータからネイバールータの MTU 設定よりも大きいパケットが送信されると、ネイバールータではそのパケットが無視されます。

OSPFネイバが Exstart/Exchange 状態でスタックしている理由 – IP : IP ルーティング – Cisco Systems

どうやらMTUを設定せよ、とのことらしい。

確認してみると今回設定されたルータのトンネルインタフェースにはmtuが設定されていなかった。

コレを設定すると途端にうまくospfをしゃべってくれるようになった。

ヘンなエラーが出てsearch daemonが立ち上がらない

madison.l3tp.org%sudo /usr/local/etc/rc.d/searchdaemon restart
searchdaemon not running? (check /var/run/searchdaemon/searchdaemon.pid).
Starting searchdaemon.
#!/usr/local/bin/php
madison.l3tp.org

Fatal error: Call to a member function add_shortcode() on a non-object in /usr/home/nicovide/public_html/wordpress292/wp-content/plugins/contact-form-7/includes/shortcodes.php on line 164

 

確かに考えて見ればその通りなんだけど、最近はちゃんといけるようになってたはず。何か原因があると思われる。以前もコレと同じエラー出てたし・・・。

MySQLのレプリケーションがうまく動かない at tritonn 5.0.67-log

MySQLのレプリケーションがうまく動かない

ちゃんとレプリケーションの情報をセットしてスタートさせてるんだけどうまく動かない。

mysql> change master to master_host='db.l2tp.org', master_user='ossan', master_password='namidafukeyo', master_log_file='mysql-bin.002233', master_log_pos=406351699;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: db.l2tp.org
Master_User: ossan
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.002233
Read_Master_Log_Pos: 406351699
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 243
Relay_Master_Log_File: mysql-bin.002233
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 406351699
Relay_Log_Space: 243
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)

上記の情報のなかでも、”Slave_IO_Running”の項目がNoになってしまっている。何度やり直してもダメ。何か原因があるのだろう。

クライアント側のエラーログを見てみる

エラーログを漁ってみると早速それっぽいログが出力されてた。

110808  8:15:58 [Note] Error reading relay log event: slave SQL thread was killed
110808  8:16:01 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.002233' at position 406351699, relay log './relay-bin.000001' position: 4
110808  8:16:01 [Note] Slave I/O thread: connected to master '[email protected]:3306',  replication started in log 'mysql-bin.000233' at position 406351699
110808  8:16:01 [ERROR] Error reading packet from server: log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master ( server_errno=1236)
110808  8:16:01 [ERROR] Got fatal error 1236: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master' from master when reading data from binary log
110808  8:16:01 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.002233', position 406351699

どうやらmax_allowed_packetの値が小さいらしい。

max_allowed_packetの値を書き換え

さて

mysql> show variables like '%max_allowed%';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)

現在の値は16M。

これで小さいって言われるんなら160Mにしてやろう。

この値はmy.cnfに記述されているので、該当する項目を書き換えて再起動すればよい。でもそうすると無駄にrelay-logの値が進んでしまったりするので今回はset globalを利用して値を直接書き換えた。

この場合、サーバを再起動すると値が戻ってしまうので要注意。今回の件に限れば今まで問題がなかったので、レプリケーションの初期さえ乗り切ってしまえば問題がないと判断。

mysql> set global max_allowed_packet=20772160;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%max_allowed%';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)

と、設定をしたものの値が書き換わらない・・・。何度かやっていると書き換わるタイミングがあることに気づく。そしてこの書き換えるべき値はどうやらサーバ側の値らしい。

どうやらセション毎を切り直さないと値がセットされないらしい。試してみる。

 shell> mysql -h db -u ossan -p -e "set global max_allowed_packet=1025000000;"
 Enter password:
 shell> mysql -h db -u ossan -p -e "show variables like 'max_allowed_packet';"
 Enter password:
 +--------------------+------------+
 | Variable_name      | Value      |
 +--------------------+------------+
 | max_allowed_packet | 1024999424 |
 +--------------------+------------+
 shell> mysql -h db -u yousan -p -e "set global max_allowed_packet=3500000;"
 Enter password:
 shell> mysql -h db -u yousan -p -e "show variables like 'max_allowed_packet';"
 Enter password:
 +--------------------+---------+
 | Variable_name      | Value   |
 +--------------------+---------+
 | max_allowed_packet | 3499008 |
 +--------------------+---------+

どうやらうまくいったみたい。で、色々と値を試してみてたんだけど、どうやらこのmax_allowed_packetは1GBを超えるあたりが限界値らしい。2GBとか1.5GBとかを指定するとwarningが出ちゃう。

そして実験的にわかったことは、その上限値が1,073,741,824と言うこと。

shell> mysql -h db -u ossan -p -e "set global max_allowed_packet=1114000000;"
Enter password:

shell> mysql -h db -u ossan -p -e "show variables like 'max_allowed_packet';"
Enter password:
+--------------------+------------+
| Variable_name      | Value      |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
shell> s -lat mysql-bin.000233
-rw-rw----  1 mysql  mysql  1073741906 Aug  1 17:20 mysql-bin.002233

で、これだと非常に困る。なぜならば今回転送できないログというのが1,073,741,906であり、先にわかった上限値の1,073,741,824を超えてしまっているからだ。

mysqlサーバでtcp/ipの待ち受けをさせないモード

mysqlサーバでtcp/ipの待ち受けをさせないモードで起動するときのオプション。

ダンプを取りたいときに使いたかったけど、キーワードがわからなくなってしまって探すのに苦労してみた。

tcp/ipを遮断、待ち受けを拒否させる。

–skip-networking

過去に自分の記事で書いてたりもしたけど見つけられなかった。

mysqldumpをやってみた