ProxmoxでNFSがマウントできなくなった

コミュニティ版Proxmox 4.1Link
+---------+
|         +--------------------->Internet
| Proxmox +
|         +--(192.168.0.0/24)--[ NFS Server (FreeNAS 9.3) ]
+---------+
という形体で運用していたのですが、マシン移動・インターネット側IPアドレス変更となったところ、storage 'NFS Server' is not onlineと出てNFSがProxmox上でマウントできなくなりました。NFS Server側のサブネットには変更が無い上、mount -t nfs (NFS Server address):/foo/bar /mnt/pve/NFS_Serverとやると難なくマウントできる。はて?

Proxmox掲示板Link を読んで

  • IP v6とNFS v4を切る → 変化なし
  • もう一度Proxmox上でNFSサーバを登録する → 変化なし
  • rpcinfo -p ipofnfsserverコマンド → 即座に応答が来て、問題無し (つまりProxmoxでis not onlineと出るのは他の原因)
  • /usr/share/perl5/PVE/Storage/NFSPlugin.pmを読むと、NFSサーバの状態を見るのに使っているコマンドはrpcinfoじゃなく、showmountだった(掲示板の記事はProxmoxのバージョンが古い)。で、shoumount --no-headers --exports (NFS Server address)と打つと、タイムアウトエラー。原因はここか…

なぜタイムアウトが起きるのだろうと調べていると、NFSサーバ上でクライアントのIPアドレスが逆引きできないと、接続拒否するLink とのこと。FreeNASの/etc/hostsにクライアントのIPアドレス(192.168.0.x)を登録すると、showmountコマンドもエラーなし、Proxmoxも無事NFSフォルダをマウントできました。

さて、残る問題はなぜ今までこの設定なしでマウントできていたのか…

[参考]

— posted by mu at 01:38 pm   commentComment [0]  pingTrackBack [0]

foltiaのDBをSqlite→PostgreSQLに変更

私が使いだしたときの(無償版)foltiaLink は、データベースエンジンとしてSQLiteLink を使うようになってました。昔のバージョンやfoltia ANIME LOCKERLinkPostgreSQLLink を使っているようですが、個人で使う用途にはSQLiteで十分だろうと思ってました。

が、実際に使いだすと、時々現れる「Database is locked」なるエラー。背後で動いているコマンド(新しい番組データの取得など)がデータベースへのアクセス権限を独占し、こちらが予約を入れようとしても失敗、背後のコマンドがいつ終わるか分からないのでいつになったら予約ができるのか分からず、イライラすることも。これはトランザクションや排他ロックをデータベースファイル全体へのロックで実装しているSQLiteでは避けられない現象なのかなと。

ということで、下記の手順でPostgreSQLに引っ越しました。Database is lockedはいつ発生するか分からないので改善したか確認できていませんが、放送予定や番組表などが見違えるほど早く表示されるようになりました。予想してなかった副作用ですが、こっちの方がメリット大きい。

さて、今後長期間運用で変な誤動作しなければいいのですが…

[手順]
データベース作成。ここでのスーパーユーザーはPostgreSQLのそれで、rootではない。
  1. PostgreSQLおよびPHPとPerlモジュールをインストール(FreeBSDの場合postgresql93-server, p5-DBD-Pg, php55-pgsql, php55-pdo_pgsql)
  2. PostgreSQLを外部から接続する必要がないなら、postgresql.confにlisten_addresses = 'localhost'を指定
  3. スーパーユーザーで以下のコマンド実行(パスワードを'foltia'以外にする場合には後述のperl/foltia_conf1.pl, php/foltia_config2.phpも適切に設定を)
    $ createuser --no-adduser --no-createdb --password foltia
    $ echo "alter role foltia with password 'foltia'" | psql
    $ createdb --owner foltia -E UTF8 foltia
    

データのコピー

  1. SQLiteのデータをダンプ
    $ sqlite3 ~foltia/foltia.sqlite .dump > foltia.sqlite.dump
    
  2. ダンプしたファイルの編集
    • PRAGMA foreign_keys=OFF;を削除
    • CREATE TABLE foltia_programの部分
      • integer PRIMARY KEY AUTOINCREMENT → serial PRIMARY KEY
    • CREATE TABLE foltia_subtitleの部分
      • startdatetime, enddatetimeの型をinteger → bigint
    • CREATE TABLE foltia_epgの部分
      • startdatetime, enddatetimeの型をinteger → bigint
      • integer PRIMARY KEY AUTOINCREMENT→serial PRIMARY KEY
    • 最後の部分
      • DELETE FROM sqlite_sequenceを削除
      • INSERT INTO "sqlite_sequence" VALUES('foltia_epg',XXXXX) → select setval('foltia_epg_epgid_seq',XXXXX) (XXXXXは数字)
  3. foltiaもしくはスーパーユーザーで以下のコマンドを実行
  4. $ psql foltia < foltia.sqlite.dump

foltiaの設定変更

  1. perl/foltia_conf1.plのコメントアウトされているPostgreSQL設定の行を有効にし、SQLite向けの設定をコメントアウトする
  2. ## for postgresql
    $main::DSN="dbi:Pg:dbname=foltia;host=localhost;port=5432";
    require 'db/Pg.pl';
    
    ## for sqlite
    #$main::DSN="dbi:SQLite:dbname=/home/foltia/foltia.sqlite";
    #require 'db/SQLite.pl';
    
    $main::DBUser="foltia";
    $main::DBPass="foltia";
    
  3. php/foltia_config2.phpのコメントアウトされているPostgreSQL設定の行を有効にし、SQLite向けの設定をコメントアウトする
  4. define("DSN", "pgsql:host=localhost dbname=foltia user=foltia password=foltia");
    // define("DSN", "sqlite:/home/foltia/foltia.sqlite");
    

[2016/3/14 追記] Perlのフラグ付きUTF8による文字化けLink を避けるため、以下のファイルを変更。

  • perl/getxml2db.pl
  • perl/xmltv2foltia.pl
変更内容
  • use Encode;を追加(use Jcode;はたぶん抜いてもいい)
  • [2016/3/23 追記] use utf8;を追加
  • foreach(@line)ループ内の最初に$_ = Encode::decode('utf8', $_);を追加、ファイルから読み込んだ文字列を即刻フラグ付きにする。
  • jcode()->tr(str1, str2)の代わりに、標準のtr/str1/str2/を用いる。変換文字内に/(スラッシュ)が入っているので、エスケープを付ける。

— posted by mu at 11:45 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0100 sec.
prev
2016.3
next
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31