DELL の対応は思ってたより悪くないw電話の担当者が日本語を母国語としてないようなので,意思疎通に多少の難点はあるけど.
○電話から修理完了までのプロセス
6/12 テクニカルサポートに電話する
6/12 メールがくる
6/12 メールで破損部の画像を送る
6/21 連絡がなかったため,メールで破損部の画像を再送する
6/22 メールで連絡がくる
6/23 破損の経緯をメールで伝える
6/23 電話で連絡がくるがとれなかったw
6/23 引き取り日選択についてのメールがきてたが,みてなかったw
6/23 再度電話がきて,引き取り日を確定する
6/23 引き取り日確定についてのメールがくる
6/27 佐川急便さんに Inspiron Mini 12 の本体のみをそのまま渡す
〜修理期間中2回ほど電話がくる〜
7/3 修理完了
○修理箇所
・左側ヒンジ
・HDD(なぜか壊れていて,40GBから80GBになって返ってきたw)
2009年7月3日金曜日
2009年7月2日木曜日
Cyrus IMAP Server エラー
メールサーバ構築の関係で,FreeBSD 上に Cyrus IMAP Server をインストールしてみたんだけど,起動時にこんなエラーがでた.
Ports の mail/cyrus-imapd23 と mail/cyrus-imapd22 でこの現象がでた.mail/cyrus-imapd2 は問題なかった.
ソースをちょこっと追ってみたんだけど,動作を完全に理解できなかったのであきらめた.ctl_cyrusdb が定期的に実行されて,checkpoint をつくるらしいんだけど,そこでどうやらエラーを吐いてる.エラーを吐かなくするパッチは簡単につくれるんだけど,なぜエラーになってるのかを完全に追いきれなかったし,このエラーによって生じている問題自体が不明なんだよね…….
追記(2009年7月17日):
コメントを頂いたおかげで解決♪ユーザ作成(メールも1通送信してみた.)すればエラーはでなくなる.運用してみれば解決するというなんとも単純な僕のミスでした.UW-IMAP から Cyrus IMAP Server に移行しようかなぁ…….
Jul 3 01:14:18 lucifer ctl_cyrusdb[67112]: DBERROR: error listing log files: DB_NOTFOUND: No matching key/data pair found
Jul 3 01:14:18 lucifer ctl_cyrusdb[67112]: DBERROR: archive /var/imap/db: cyrusdb error
Ports の mail/cyrus-imapd23 と mail/cyrus-imapd22 でこの現象がでた.mail/cyrus-imapd2 は問題なかった.
ソースをちょこっと追ってみたんだけど,動作を完全に理解できなかったのであきらめた.ctl_cyrusdb が定期的に実行されて,checkpoint をつくるらしいんだけど,そこでどうやらエラーを吐いてる.エラーを吐かなくするパッチは簡単につくれるんだけど,なぜエラーになってるのかを完全に追いきれなかったし,このエラーによって生じている問題自体が不明なんだよね…….
追記(2009年7月17日):
コメントを頂いたおかげで解決♪ユーザ作成(メールも1通送信してみた.)すればエラーはでなくなる.運用してみれば解決するというなんとも単純な僕のミスでした.UW-IMAP から Cyrus IMAP Server に移行しようかなぁ…….
2009年6月25日木曜日
FreeBSD でサーバ構築 #14 リレー設定
林檎生活100: FreeBSD でサーバ構築 #13 ドメイン名のメールの受信の続き.今回は,メールクライアントからこのメールサーバをメール送信サーバ(SMTP サーバ)として使用できるように,リレーの設定をする.(次回説明する SMTP-AUTH を使用する場合は,今回の設定は必要ない.)
さて,メールクライアントからメール送信サーバとして使用できるようにするにはどうすればいいのか.逆に言えば,なぜメール送信サーバとして使用できないのかをまず考えよう.
SMTP サーバは,メールを受け取ると基本的には次の2つの処理をする.
1. ローカル配信
2. 転送(リレー)
1のローカル配信は,自ホスト宛のメールということで,どこから送られてきても基本的には受信してローカル配信をする.(メールアドレスさえ知っていれば,誰からのメールでもとりあえず届くよね.)2の転送は,自ホスト宛ではないメールを MX レコードを引いたりして,別のメールサーバに転送するということだ.これをどこから送られてきても処理していたら,問題になってしまうので,転送は制限されている.それゆえ,デフォルトでは,メールクライアントからメール送信サーバとして扱えないようになっている.
なぜ問題になるのか.それは,スパムメールの中継サーバに悪用される可能性があるからだ.(悪用される可能性と書いたけど,誰からのメールでも転送する(オープンリレー)状態で放置しておいたら,スパムを転送しようとしてオープンリレーのサーバを探しているクローラに発見されて悪用される.)なので,FreeBSD の Sendmail では,localhost 以外からのメールを転送はしないようにリレー設定されている.
では,ある特定のホストやユーザからのメールを転送するように設定しようと思う.普通に考えれば,ユーザ認証すればいいんじゃない?と思うところだけど,SMTP はスパムメールという概念すらなかったころの古いプロトコルなのでユーザ認証の仕組みがないんだよね.(ユーザ認証が使えるようにする設定は,次回やろうと思ってはいるんだけどね.)なので今回は,メールは自宅からしか使わないことを前提に,LAN 内のホストからの転送を許可するように設定してみる.
1. /etc/mail/access の変更
リレーを許可するホストを指定するには,/etc/mail/access ファイルに次のような行を追加する.これは,接続したホストの IP アドレスが 192.168.1.xxx であればリレーを許可するというものだ.LAN 内のホストの IP アドレスが 192.168.1.xxx である場合は,この設定でメールクライアントからメール送信サーバとして扱えるようになる.
2. アクセスデータベースを再構築する.
以上で設定完了だ.メールクライアントにこのメールサーバを設定するとリレーが可能になっているはずだ.今回は SMTP サーバと会話してみよう.(ちょくせつ SMTP コマンドを発行するということ.)Mac OS X などサーバではないクライアントから次のようにコマンドを打ってみよう.(適宜ホスト名などは,自分の環境に置き換えてほしい.)
接続元ホスト IP:192.168.1.7
接続先ホスト IP:192.168.1.255
接続元ホスト名:michael.legna.org(適当で OK.)
接続先ホスト名:lucifer.legna.org
送信元メールアドレス:takuya__at__legna.org
送信先メールアドレス:example__at__example.com
というかんじだ.送信できることを確認してほしい.時間があれば,access の内容を書き換えて実験してみてほしい.また,WAN 側から悪用されるようなリレーが働いていないかどうか,次のサイトにアクセスして調べてみよう.Address to test: の項目に接続先ホスト名 (lucifer.legna.org) を入力し,Test for relay をクリックするだけだ.出力の最後に Relay test result の項があり,All tests performed, no relays accepted. となっていれば WAN 側から悪用されることはないはずだ.
Abuse.net: Mail relay testing


というかんじ.リレーの話を理解してもらえたかな.SMTP がシンプルゆえの設定というかんじ.次回は,Sendmail に SMTP 認証する機能を付加したいと思う.いくつかインストールしなければならないプログラムがあるし,Sendmail をリビリルドしなきゃならないし,かなり面倒くさいかんじなんだよなぁ…….まあ,LAN 内からしか使わないっていう人は,次の回の設定はいらないね.
参考文献:
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集
さて,メールクライアントからメール送信サーバとして使用できるようにするにはどうすればいいのか.逆に言えば,なぜメール送信サーバとして使用できないのかをまず考えよう.
SMTP サーバは,メールを受け取ると基本的には次の2つの処理をする.
1. ローカル配信
2. 転送(リレー)
1のローカル配信は,自ホスト宛のメールということで,どこから送られてきても基本的には受信してローカル配信をする.(メールアドレスさえ知っていれば,誰からのメールでもとりあえず届くよね.)2の転送は,自ホスト宛ではないメールを MX レコードを引いたりして,別のメールサーバに転送するということだ.これをどこから送られてきても処理していたら,問題になってしまうので,転送は制限されている.それゆえ,デフォルトでは,メールクライアントからメール送信サーバとして扱えないようになっている.
なぜ問題になるのか.それは,スパムメールの中継サーバに悪用される可能性があるからだ.(悪用される可能性と書いたけど,誰からのメールでも転送する(オープンリレー)状態で放置しておいたら,スパムを転送しようとしてオープンリレーのサーバを探しているクローラに発見されて悪用される.)なので,FreeBSD の Sendmail では,localhost 以外からのメールを転送はしないようにリレー設定されている.
では,ある特定のホストやユーザからのメールを転送するように設定しようと思う.普通に考えれば,ユーザ認証すればいいんじゃない?と思うところだけど,SMTP はスパムメールという概念すらなかったころの古いプロトコルなのでユーザ認証の仕組みがないんだよね.(ユーザ認証が使えるようにする設定は,次回やろうと思ってはいるんだけどね.)なので今回は,メールは自宅からしか使わないことを前提に,LAN 内のホストからの転送を許可するように設定してみる.
1. /etc/mail/access の変更
リレーを許可するホストを指定するには,/etc/mail/access ファイルに次のような行を追加する.これは,接続したホストの IP アドレスが 192.168.1.xxx であればリレーを許可するというものだ.LAN 内のホストの IP アドレスが 192.168.1.xxx である場合は,この設定でメールクライアントからメール送信サーバとして扱えるようになる.
Connect:192.168.1 RELAY
2. アクセスデータベースを再構築する.
# cd /etc/mail
# make maps
以上で設定完了だ.メールクライアントにこのメールサーバを設定するとリレーが可能になっているはずだ.今回は SMTP サーバと会話してみよう.(ちょくせつ SMTP コマンドを発行するということ.)Mac OS X などサーバではないクライアントから次のようにコマンドを打ってみよう.(適宜ホスト名などは,自分の環境に置き換えてほしい.)
$ telnet 接続先ホスト IP smtp
Trying 接続先ホスト IP...
Connected to 接続先ホスト IP.
Escape character is '^]'.
220 接続先ホスト名 ESMTP Sendmail 8.14.3/8.14.3; Fri, 26 Jun 2009 08:38:17 +0900 (JST)
HELO 接続元ホスト名
250 接続先ホスト名 Hello [接続元ホスト IP], pleased to meet you
MAIL From: 送信元メールアドレス
250 2.1.0 送信元メールアドレス... Sender ok
RCPT To: 送信先メールアドレス
250 2.1.5 送信先メールアドレス... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
To: 送信先メールアドレス
Subject: This is test mail.
This is test mail from Mac OS X.
.
250 2.0.0 n5PNcHsY002853 Message accepted for delivery
QUIT
221 2.0.0 lucifer.legna.org closing connection
Connection closed by foreign host.
$
接続元ホスト IP:192.168.1.7
接続先ホスト IP:192.168.1.255
接続元ホスト名:michael.legna.org(適当で OK.)
接続先ホスト名:lucifer.legna.org
送信元メールアドレス:takuya__at__legna.org
送信先メールアドレス:example__at__example.com
というかんじだ.送信できることを確認してほしい.時間があれば,access の内容を書き換えて実験してみてほしい.また,WAN 側から悪用されるようなリレーが働いていないかどうか,次のサイトにアクセスして調べてみよう.Address to test: の項目に接続先ホスト名 (lucifer.legna.org) を入力し,Test for relay をクリックするだけだ.出力の最後に Relay test result の項があり,All tests performed, no relays accepted. となっていれば WAN 側から悪用されることはないはずだ.
Abuse.net: Mail relay testing


というかんじ.リレーの話を理解してもらえたかな.SMTP がシンプルゆえの設定というかんじ.次回は,Sendmail に SMTP 認証する機能を付加したいと思う.いくつかインストールしなければならないプログラムがあるし,Sendmail をリビリルドしなきゃならないし,かなり面倒くさいかんじなんだよなぁ…….まあ,LAN 内からしか使わないっていう人は,次の回の設定はいらないね.
参考文献:
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集
FreeBSD でサーバ構築 #13 ドメイン名のメールの受信
林檎生活100: FreeBSD でサーバ構築 #12 メールの受信の続き.今回は,ホスト名 (takuya__at__lucifer.legna.org) ではなく,ドメイン名 (takuya__at__legna.org) のメールを受信できるように設定しよう.
まず何をやらなければならないかを考える.変わったのはメールアドレスのホスト名をドメイン名だけにしたことだ.つまり,ドメイン名 (legna.org) からメールサーバのホスト名 (lucifer.legna.org) を引けるようになる必要がある.つまり,MX レコードにこれを設定する必要がある.そして,Sendmail は,rc.conf に設定されているホスト名 (hostname="lucifer.legna.org") のメールをローカル配信するものとして処理するが,ドメイン名 (legna.org) のメールをローカル配信するものとしては処理しない.よって,ドメイン名のメールをローカル配信するものとしては処理するように設定する必要がある.
それでは,この2点について設定していこう.
1. MX レコードの記述
MX レコードの記述は,次のようにそのまま書ける.(起点名が legna.org だから省略して空白になる.)シリアル番号を増加させることと,named を再起動させることを忘れないように.
2. ローカル配信するメールのホスト名の設定
/etc/mail/local-host-names というファイルに,次の内容を記述し,Sendmail を再起動する.このファイルに記述されたホスト名宛のメールについては,ローカル配信するものとして処理するようになる.
設定はこれだけ.これで,takuya__at__legna.org というメールアドレスのメールを受信できるようになるので,実際にメールを送って試してみてね.
ローカル配信するメールのホスト名の設定にはいくつか方法があるのだけど,今回は,設定ファイルをビルドする必要がなく,Sendmail を再起動するだけで実現できるこの方法をとることにした.僕としては,この方法がオススメ.
さて,次回は,メールクライアント(Max OS X の Mail や Thunderbird など.) から送信サーバ(SMTP サーバ)として扱えるように設定する.その際に,メールのリレーについての話もする予定.お楽しみに♪
参考文献:
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集
まず何をやらなければならないかを考える.変わったのはメールアドレスのホスト名をドメイン名だけにしたことだ.つまり,ドメイン名 (legna.org) からメールサーバのホスト名 (lucifer.legna.org) を引けるようになる必要がある.つまり,MX レコードにこれを設定する必要がある.そして,Sendmail は,rc.conf に設定されているホスト名 (hostname="lucifer.legna.org") のメールをローカル配信するものとして処理するが,ドメイン名 (legna.org) のメールをローカル配信するものとしては処理しない.よって,ドメイン名のメールをローカル配信するものとしては処理するように設定する必要がある.
それでは,この2点について設定していこう.
1. MX レコードの記述
MX レコードの記述は,次のようにそのまま書ける.(起点名が legna.org だから省略して空白になる.)シリアル番号を増加させることと,named を再起動させることを忘れないように.
MX 10 lucifer.legna.org.
2. ローカル配信するメールのホスト名の設定
/etc/mail/local-host-names というファイルに,次の内容を記述し,Sendmail を再起動する.このファイルに記述されたホスト名宛のメールについては,ローカル配信するものとして処理するようになる.
legna.org
設定はこれだけ.これで,takuya__at__legna.org というメールアドレスのメールを受信できるようになるので,実際にメールを送って試してみてね.
ローカル配信するメールのホスト名の設定にはいくつか方法があるのだけど,今回は,設定ファイルをビルドする必要がなく,Sendmail を再起動するだけで実現できるこの方法をとることにした.僕としては,この方法がオススメ.
さて,次回は,メールクライアント(Max OS X の Mail や Thunderbird など.) から送信サーバ(SMTP サーバ)として扱えるように設定する.その際に,メールのリレーについての話もする予定.お楽しみに♪
参考文献:
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集
2009年6月24日水曜日
C 言語の話#4 リスト
リストを林檎生活100: C 言語の話#3 オブジェクト指向プログラミング?のように実装.まあ,スタック的操作しか実装してないけどwイテレータもやればできるもんだね.
/* main.c */
#include <stdio.h>
#include <string.h>
#include "book.h"
#include "list.h"
int main(void)
{
List *books;
Book *book;
Iterator *it;
books = newList();
books->push(books, newBook("伝奇集", "J.L. ボルヘス"));
books->push(books, newBook("ぼく、オタリーマン。", "よしたに"));
books->push(books, newBook("ブタのいどころ", "小泉吉宏"));
it = newIterator(books);
while (it->hasNext(it)) {
book = it->next(it);
printf("%s\t%s\n", book->getTitle(book), book->getAuthor(book));
}
deleteIterator(it);
while ((book = books->pop(books)) != NULL)
deleteBook(book);
deleteList(books);
return 0;
}
/* list.h */
#ifndef __LIST_H__
#define __LIST_H__
typedef struct _List List;
typedef struct _Iterator Iterator;
typedef struct _Element Element;
struct _List {
Element *first;
int ((*push)(List *list, void *data));
void *((*pop)(List *list));
};
struct _Iterator {
Element *e;
int ((*hasNext)(const Iterator *it));
void *((*next)(Iterator *it));
};
List *newList(void);
void deleteList(List *list);
Iterator *newIterator(List *list);
void deleteIterator(Iterator *it);
#endif /* __LIST_H__ */
/* list.c */
#include
#include
#include "list.h"
struct _Element {
Element *next;
void *data;
};
int list_push(List *list, void *data);
void *list_pop(List *list);
int iterator_hasNext(const Iterator *it);
void *iterator_next(Iterator *it);
Element *newElement(Element *e, void *data);
void deleteElement(Element *e);
List *newList(void)
{
List *list;
list = (List *)malloc(sizeof(List));
if (list == NULL) {
fprintf(stderr, "%s:%d: error: %s()\n", __FILE__, __LINE__, __func__);
return NULL;
}
list->first = NULL;
list->push = list_push;
list->pop = list_pop;
return list;
}
void deleteList(List *list)
{
free(list);
}
int list_push(List *list, void *data)
{
Element *e;
e = newElement(list->first, data);
if (e == NULL) {
fprintf(stderr, "%s:%d: error: %s()\n", __FILE__, __LINE__, __func__);
return -1;
}
list->first = e;
return 0;
}
void *list_pop(List *list)
{
Element *e;
void *data;
if (list->first == NULL)
return NULL;
e = list->first;
data = e->data;
list->first = e->next;
deleteElement(e);
return data;
}
Iterator *newIterator(List *list)
{
Iterator *it;
it = (Iterator *)malloc(sizeof(Iterator));
if (it == NULL) {
fprintf(stderr, "%s:%d: error: %s()\n", __FILE__, __LINE__, __func__);
return NULL;
}
it->e = list->first;
it->hasNext = iterator_hasNext;
it->next = iterator_next;
return it;
}
void deleteIterator(Iterator *it)
{
free(it);
}
int iterator_hasNext(const Iterator *it)
{
return it->e != NULL ? 1 : 0;
}
void *iterator_next(Iterator *it)
{
void *data;
if (!iterator_hasNext(it))
return NULL;
data = it->e->data;
it->e = it->e->next;
return data;
}
Element *newElement(Element *next, void *data)
{
Element *e;
e = (Element *)malloc(sizeof(Element));
if (e == NULL) {
fprintf(stderr, "%s:%d: error: %s()\n", __FILE__, __LINE__, __func__);
return NULL;
}
e->next = next;
e->data = data;
return e;
}
void deleteElement(Element *e)
{
free(e);
}
2009年6月23日火曜日
登録:
投稿 (Atom)