GMOクラウド(CentOS7)でqmailを立ち上げる

CentOS 7 では yum install qmail-src ができないのね。当たり前か。もう qmail は使わないのね。
Postfix に移行しようかと思ったけど、とりあえず

  • qmail 本体とパッチのプログラムが手に入る。
  • make が通る

のなら、もう少し qmail で頑張ってみようかと思ってやってみました。

まず、qmail 用のユーザとグルーブ、そしてディレクトリを作成

# mkdir /var/qmail
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias -s /sbin/nologin -M alias
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails

qmail 関係のソースをインターネットからダウンロード

# wget http://cr.yp.to/software/qmail-1.03.tar.gz
# wget http://www.raj-corp.com/qmail-smtpd-auth-0.31.tar.gz
# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# wget http://www.raj-corp.com/qmail-smtpd-relay-reject
# wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
# wget http://www.ckdhr.com/ckd/qmail-103.patch
# wgetできなかったので、ウェブブラウザで開いて、サーバにアップ。http://www.ksknet.net/sample/qmail-date-localtime.patch
# tar zxvf qmail-1.03.tar.gz
# tar zxvf qmail-smtpd-auth-0.31.tar.gz
# mv qmail-date-localtime.patch qmail-1.03
# mv qmail-smtpd-relay-reject qmail-1.03
# mv qmail-smtpd-auth-0.31/* qmail-1.03
# mv qmail-103.patch qmail-1.03

ここで、GMO ALTUS の CentOS 7.3 には gcc と patch が入っていなかったので、泥縄的にインストール。

# yum install patch
# yum install gcc

パッチを当てて、error.h を修正

# patch < qmail-date-localtime.patch
# patch < qmail-smtpd-relay-reject
# patch < auth.patch
# patch < qmail-103.patch

# vi error.h

extern int errno;
↓
#include<errno.h>

# make setup check

通ったー!

qmail の関係の設定ファイルを作成

# cd /var/qmail/control
# echo somehost.pocolog.net > me
# echo somehost.pocolog.net > locals
# echo somehost.pocolog.net > rcpthosts
# echo pocolog.net > defaultdomain
# echo somehost.pocolog.net > plusdomain
# cd ../alias
# echo foo@example.net > .qmail-postmaster
# echo foo@example.net > .qmail-mailer-daemon
# echo foo@example.net > .qmail-root

qmailの起動確認

(取っておいた)起動スクリプトのサンプルを使って起動確認。

# cd /(ソースをダウンロードしたパス)/qmail-1.03
# cp home /var/qmail/rc
# bash /var/qmail/rc &
# ps -ef | grep qmail

qmail 関係のプロセスが動いていたらOK。確認が終わったら qmail-send を kill しておく。
で、ここで気付いた。メールサーバの疎通確認には tcpserver(と daemontools)のインストールが必要と。
というわけで、次回は tcpserver & daemontools のインストールと設定。

(追記)

# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

GMOクラウド(CentOS7)でdaemontoolsとtcpserverを立ち上げる

とりあえず tcpserver はインストールする。daemontools を使うほどではないかと思ったけど、CentOS では今までのように /etc/rc.d/init.d を書けばいいということではないみたい。
というわけで、消去法で daemontools を稼働させることにした。

tcpserver のインストール

# cd /home/hoge/qmail
# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# tar xfz  ucspi-tcp-0.88.tar.gz 
# cd ucspi-tcp-0.88

# vi error.h
extern int errno;
↓
#include に変更

#make setup check

daemontools のインストール

# cd /home/hoge/daemontools
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

# mkdir -p /package
# chmod 1755  /package
# cd /package/
# tar xfz /usr/local/src/daemontools-0.76.tar.gz 
# cd /package/admin/daemontools-0.76/

# vi /package/admin/daemontools-0.76/src/error.h
---
extern int errno;
↓
#include <errno.h>

# package/install

インストールできた!

systemctl で daemontools を動かす

# vi /etc/systemd/system/daemontools.service 
[Unit]
Description=daemontools Start supervise
After=getty.target

[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/command/svscanboot /dev/ttyS0
TimeoutSec=0

[Install]
WantedBy=multi-user.target
# systemctl enable daemontools
# systemctl start daemontools

qmail と tcpserver の実行設定

qmail と tcpserver の実行設定を daemontools 流に書く。
/var/supervise 配下に設定ファイルを書いて、/service 配下で動かすことにした。

# mkdir /var/supervise
# mkdir /var/supervise/qmail
# mkdir /var/supervise/smtpd

qmail の run ファイル

# vi /var/supervise/qmail/run

#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH \
qmail-start ./Maildir/ splogger qmail

サービスディレクトリにシンボリックリンクを張る。

# ln -s /var/supervise/qmail /service/qmail

# svstat /service/*
でサービスが起動していることをチェック。

tcpserver の run ファイル

vi /var/supervise/smtpd/run

#!/bin/sh

exec env - PATH="/var/qmail/bin:/sbin:/bin:/usr/sbin:/usr/bin: \
/usr/local/sbin:/usr/local/bin" \
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb \
-R -H -l0 -u (qmaildのUID) -g (nofilesのGID) 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1

同じく
# svstat /service/*
で smtpd が起動していることをチェック。
おっと、その前に tcp.smtp.cdb を作成。

# vi /etc/tcp.smtp

127.:allow,RELAYCLIENT=""

# /usr/local/bon/tcprules /etc/tcp.smtp.cdb /etc.tcp.smtp.tmp < /etc/tcp.smtp

これで動くはず。

(追記)

# firewall-cmd --add-service=smtp
success
# firewall-cmd --add-service=smtp --permanent
success
# firewall-cmd --list-services
dhcpv6-client http ssh smtp

を忘れずに。

GMOクラウドでhttpsサーバを立ち上げる その1

GMOクラウドALTUSでhttpsサーバを立ち上げる道のりです。

目標は

  • httpsウェブサーバを立ち上げる
  • WordPressも立ち上げる
  • メールサーバも立ち上げる

です。

まずは、GMOクラウドの会員ページ→コンソールで新しい仮想サーバを作成。

OSはCentOS 7.3 LAMP 64bit
構成はミニサーバ
ディスクはなし
最後にrootパスワードが表示されるので、それをメモ。

同じくネットワークメニューから新規グローバルIPアドレスを付与。

コンソールのコンソールからrootでログインして初期パスワードを変更。
同時に、作業用の一般ユーザをuseraddで作成。

TeraTermよりsshログイン。
netstat -anとps auxで起動サービスを確認。
ApacheとSSHDが立ち上がっている模様。
ポートは空いているけど、メールサーバは立ち上がっていない模様。

ウェブブラウザでhttpアクセスして、サーバにつながって、Apacheの初期ページが表示されることを確認。

あ、お名前.comで新しいホストのAレコードも設定。

それで今日は時間切れ。

[Perl][Javascript]ファイルをドラッグ&ドロップでサーバにアップロードする

ファイルをドラッグ&ドロップしてサーバにアップロードする方法がやっとわかりました。
肝は以下のところです。

function uploadFile(file){
var formData = new FormData();
formData.append('file', file);
$.ajax({
  async: true,
  type: 'POST',
  contentType: false,
  processData: false,
  url: 'dndtest.cgi',
    data: formData,
    dataType :'html'
}).done(function(){});

ファイルをドラッグ&ドロップしてファイル名などを取得する方法は結構ネットにあがっていますけど、実際にそのファイルをサーバにアップロードする方法を解説するサイトがなく、苦労しました。

  1. FormDataを使う。
  2. ajaxでPOSTする。

ファイルをアップロードする箇所は以下の通りです。

my $q = new CGI;
my @fps = $q->upload('file');
my @fnames = $q->param('file');
my $idx = 0;
foreach my $fname(@fnames){
    $fname = basename($fname);
    copy($fps[$idx], "./test/$fname");
    $idx++;
}

$q->upload()を使うということになかなか気づきませんでした。

以下がソースです。複数ファイルのドラッグ&ドロップにも対応しています。
“[Perl][Javascript]ファイルをドラッグ&ドロップでサーバにアップロードする” の続きを読む

[Perl] ディレクトリを再帰的にたどってファイルをコピーする

#!/usr/bin/perl
use strict;
use File::Copy;

my $srcFile = $ARGV[0]; # コピーするファイル名を取得
print "src file : $srcFile\n";

# 再帰コピー関数
sub recurseCopy{
	my($src, $dir) = @_;
	my @files = ();
	
	print "entering $dir\n";
	
	# カレントディレクトリのディレクトリ・ファイルを取得
	opendir(DIR, $dir) or die("Can not open directory : $dir\n");
	@files = readdir(DIR);
	closedir(DIR);
	
	foreach my $file(sort @files){
		next if($file =~ /^\.{1,2}$/);
		if(-d "$dir/$file"){
			# ディレクトリの場合、再帰コピー呼び出し
			recurseCopy($srcFile, "$dir/$file");
		}
	}
	print "copying $src to $dir\n";
	# 自分自身にはコピーしない
	if($dir ne "\."){
		copy($srcFile, $dir);
	}
}
print "start\n";
my $b = recurseCopy($srcFile, ".");
print "end\n";

2018年版 ウェブサイトを30分でレスポンシブ(スマホ対応)に90%実装する方法

手軽にウェブサイトをレスポンシブウェブデザイン(iPhoneなどのスマホに対応)にする方法です。

右側にメインコンテンツ部、左側にサイドメニューがある一般的なデザインで、スマホで見るとサイドメニューをメインコンテンツの下に表示するようにします。
スマホの判別は

@media screen and (max-width: 48em),screen and (max-device-width:480px)

でやります。
ホントは画面サイズによっていろんな要素の最大幅・最小幅を設定した方がいいのですが、とりあえずこれで80%対応できます。
凝りだすとたいへんなんですよね~。だから費用対効果のいいところでやめます。(笑)
“2018年版 ウェブサイトを30分でレスポンシブ(スマホ対応)に90%実装する方法” の続きを読む