ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

バーチャルホストのメールサーバ③

(小言)OSを学ぼう ~xv6編~

ボクはIT技術の中で最も興味があることは、OSについてである。
OSと一口にっても、カーネルを指すのかその周りのライブラリやドライバを含めるのか、カーネルでもモノリシックなのかマイクロなのか、汎用なのかリアルタイムなのか、といろいろある。
どういったOSについて興味があるかというと、そのいずれもについてである。

OSの中でも実装しやすく、理解しやすい組み込みOSについて下記で学ばせて頂いた。
12ステップで作る 組込みOS自作入門

12ステップで作る組込みOS自作入門

12ステップで作る組込みOS自作入門

非常にわかりやすく、OSを動作させるのに必要なハードウェアについての知識も細かく書いてあり、納得がいくまで学ぶことができた。この本で学んでる時は、めちゃエキサイトしていた覚えがある。
ボクはこの本を読みながら、自分で自分なりのソースコードを書き、bootloaderも他の汎用的なものを利用させていただき動作させる、というような方法で学習した。
github.com
興味がある方は、ぜひぜひ一緒に遊びながら作りましょう、教えれることはな~んもないけども。

組込みOSを学んだ次は、汎用OSである。
xv6wikipediaから抜粋すると、

xv6は、ANSI Cによる、Sixth Edition Unixマルチプロセッサx86システムへの再実装である。

つまり、現在の大多数のUnix(Linuxは含まない)の原始となるUnix第6版を現代のCPUアーキテクチャ用に書き換えたものである。 また、Unix第6版はpre K&Rと呼ばれる、ANSI Cとは全然違う仕様のC言語で書かれていたのだが、これがANSI Cで書きなおされている。これがMITの凄さか…

下記に詳細がある。
https://pdos.csail.mit.edu/6.828/2014/xv6.html
基本的に英語の文書しかないので、ハードルは上がるのだが、それでも読みたい内容盛りだくさんのはずだ。

現在下記の自分のサーバでhtml形式の文書を作成中。
xv6 book-rev8
このテキストブックもMITライセンス(のはず)なので、公開してみようかと思う。
まだ不完全な状態なので、もう少し綺麗に整形したりしていくようにしたい。

前回からの続き

tokixy56.hatenablog.com
tokixy56.hatenablog.com

バーチャルホスト用メールユーザの作成

ユーザ作成
$ sudo useradd -a mailuser
$ sudo passwd mailuser
メール受信用ディレクトリ作成
$ cd /var/spool/
$ sudo mkdir vmailbox
$ sudo chown mailuser:mailuser ./vmailbox
$ sudo chmod 775 ./vmailbox

Dovecotの設定

/etc/dovecot/dovecot.conf
!include conf.d/*.conf
!include_try local.conf
/etc/dovecot/local.conf

dovecot.confに直接書かないための設定ファイル

auth_debug_passwords = yes
auth_verbose = no
auth_debug = yes

listen = *
disable_plaintext_auth = no
auth_mechanisms = PLAIN LOGIN CRAM-MD5
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if there's no domain
#   %h - home directory
mail_location = maildir:/var/spool/vmailbox/%d/%u:INBOX=/var/spool/vmailbox/%d/%u
first_valid_uid = 10000
first_valid_gid = 10000
protocols = imap pop3

protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
protocol pop3 {
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
/etc/dovecot/conf.d/10-master.conf
service auth {
...
  unix_listener auth-userdb {
    #mode = 0666
    #user =
    #group =
  }

  # Postfix smtp-auth
  #unix_listener /var/spool/postfix/private/auth {
  #  mode = 0666
  #}
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

  # Auth process is run as this user.
  #user = $default_internal_user
}

そして確か、

$ sudo chmod 700 /var/spool/postfix/private
$ sudo chmod 666 /var/spool/postfix/private/*
$ sudo chown -R postfix:root /var/spool/postfix/private

が必要だったはず…。

/etc/dovecot/conf.d/10-auth.conf

認証設定ファイルの指定

!include auth-sql.conf.ext
/etc/dovecot/conf.d/auth-sql.conf.ext

dovecotのデータベースへのクエリ設定ファイルの指定

passdb {
  driver = sql

  # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
/etc/dovecot/dovecot-sql.conf.ext

dovecotのデータベースへのクエリ設定

# for postfixadmin
connect = host=localhost dbname=postfix user=postfix password=パスワード
driver = mysql

# Default password scheme.
# depends on your $CONF['encrypt'] setting:
# md5crypt  -> MD5-CRYPT
# md5       -> PLAIN-MD5
# cleartext -> PLAIN
default_pass_scheme = MD5-CRYPT

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT CONCAT('/var/spool/vmailbox/', maildir) AS mail, 10000 AS uid, 10000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1'
/etc/dovecot/conf.d/10-ssl.conf

SSL設定

ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cert = </etc/postfix/mail.crt
ssl_key = </etc/postfix/mail.key
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

httpdの設定 (2016-07-21 追加)

あまり詳細に書かず、今回の設定に必要だと思われるれる最低限のみ記載する。

/etc/httpd/conf/httpd.conf
User apache
Group apache
ServerAdmin username@localhost

#【CentOS6,5の場合】バーチャルホスト対応
#ServerName ドメイン:80 ← コメントアウト
NameVirtualHost *:80
#【CentOS7の場合】
ServerName ドメイン:80

# Further relax access to the default document root:
<Directory "/var/www/html">
    Options Indexes ExecCGI FollowSymLinks
    AllowOverride all
    Order deny,allow
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.php index.cgi index.py index.rb index.pl
</IfModule>

    AddHandler cgi-script .cgi .pl .rb .py .php

AddDefaultCharset UTF-8

バーチャルホスト対応

/etc/httpd/conf.d/virtualhost-00.conf
<VirtualHost *:80>
    ServerName any
    <Location />
        Require all denied
    </Location>
</VirtualHost>

以下は、バーチャルドメイン毎に追加。

/etc/httpd/conf.d/virtualhost-www.hogehoge.com.conf
<VirtualHost *:80>
    ServerName www.hogehoge.com
    DocumentRoot /var/www/html/hogehoge
</VirtualHost>
/etc/httpd/conf.d/virtualhost-mail.fugafuga.com.conf
<VirtualHost *:80>
    ServerName mail.fugafuga.com
    DocumentRoot /var/www/html/fugafuga
    ErrorLog logs/virtual-error_log
    CustomLog logs/virtual-access_log combined env=!no_log
</VirtualHost>

次回

httpdとPostfixAdminの設定ファイルを書く。
また、今回参照させて頂いた各ページの紹介をしておきたい。 というかそっちのページの方が説明等あってわかりやすいかもしれない。
httpdに関しては他に沢山資料があってそっちの方がわかりやすいと思うけども、とりあえず書いておこう。

設定ファイルにやたらDBへのクエリ設定書いてあるけど全然理解してませーん。