2013年7月30日火曜日

[Network] IPアドレスの衝突

最近普段自分が利用するIPネットワークが不安定にたまにホストの名前解決に失敗する
ネットワークの構成変更をしたばかりでもあり、一番可能性が疑われるIPアドレスの衝突の調査をしてみる。

BSD系OS/Windows
[1] arpテーブルを全て削除
arp -d # BSD系OSの場合 root権限で

[2] テーブルエントリーの追加のために衝突が疑われるアドレスに対してping
ping dst-address

[3] arpテーブルの表示
arp -a

上記手順を数回繰り返して、[3]で表示されるMACアドレスが複数あれば、IPアドレスが衝突していることになる。




2013年7月23日火曜日

[FreeBSD] GUI環境構築

DM に xfce4 を採用してGUI環境を構築したが、シャットダウン、リブートを一般ユーザーが出来ない

これを解決するためには、/usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.consolekit.pkla を作成して以下を記述する

[Local restart]
  Idendity=unix-group:power
  Action=org.freedesktop.consolekit.system.restart
  ResultAny=yes
  ResultInactive=yes
  ResultActive=yes

  [Local shutdown]
  Idendity=unix-group:power
  Action=org.freedesktop.consolekit.system.stop
  ResultAny=yes
  ResultInactive=yes
  ResultActive=yes

  [Local restart - multiple]
  Idendity=unix-group:power
  Action=org.freedesktop.consolekit.system.restart-multiple-users
  ResultAny=yes
  ResultInactive=yes
  ResultActive=yes

  [Local shutdown - multiple]
  Idendity=unix-group:power
  Action=org.freedesktop.consolekit.system.stop-multiple-users
  ResultAny=yes
  ResultInactive=yes
ResultActive=yes

そして、シャットダウン、リブートを許可したいユーザーをpowerグループに所属させる

2013年7月8日月曜日

[FreeBSD] ports チェックサム unmatched

portsにてgmakeをコンパイル、インストールしようとしたら、チェックサムが合わないと言われた。

make distclean

でダウンロードしてきたファイルを削除して

make checksum

でハッシュ値を計算しなおしたらいけた。

[libxml2] XPath によるxmlのパース

APIの多さと初心者向けの情報の少なさで苦戦してますが、ようやく超最低限なパースができたのでメモ


パースするXMLファイル
<?xml version="1.0" encoding="us-ascii" ?>
<orchestra>
  <players num="3">
    <player>aoki</player>
    <player>nakashima</player>
    <player>suzuki</player>
  </players>
</orchestra>

コード
#include <stdio.h>
#include <libxml/xmlreader.h>
#include <libxml/xpath.h>

int main(int argc, char **argv){

  char *xml;
  char *xmlPath;
  int i;

  xmlXPathContextPtr cntxt;
  xmlXPathObjectPtr xmlObj;
  xmlDocPtr doc;
  xmlNodeSetPtr nodes;
  xmlNodePtr node;
  struct _xmlAttr *curAttr;

  xml = argv[1];
  xmlPath = argv[2];
  
  doc = xmlParseFile(xml);
  if(!doc) return -1;
  cntxt = xmlXPathNewContext(doc);
  if(!cntxt) return -1;
  xmlObj = xmlXPathEvalExpression((xmlChar *) xmlPath, cntxt);
  if(!xmlObj) return -1;

  nodes = xmlObj->nodesetval;

  // iterate node
  for(i=0;i<nodes->nodeNr; i++){
    node = xmlXPathNodeSetItem(nodes, i);

    // node name
    printf("=%s=\n", node->name);
    // properties
    curAttr = node->properties;
    while( curAttr != NULL ){
      printf("%s: %s\n", curAttr->name, curAttr->children->content);
      curAttr = curAttr->next;
    }
    if(node->children->content != NULL ){
      printf("content= %s\n",  node->children->content);
    }
  }


  xmlXPathFreeContext(cntxt);
  xmlFreeDoc(doc);
  xmlCleanupParser();

  return 0;
}

実行
./a.out sample/01.xml "//*"

出力
=orchestra=
content= 
  
=players=
num: 3
content= 
    
=player=
content= aoki
=player=
content= nakashima
=player=
content= suzuki


上記サンプルには、値を含んでいないcontentのケアを含んでいない。

参考サイト: http://d.hatena.ne.jp/hakutoitoi/20090319/1237397160 取っ掛かりのコード