シェルスクリプトでmailコマンドによるメール送信

シェルスクリプトでメールを送る方法

#!/bin/sh

address="user@domain"
subject="題名"
contents="本文"
echo "$contents" | mail -s "$subject" "$address"

【応用】複数メールアドレスにメールを送る

#!/bin/sh

address=("user1@domain" "user2@domain")
subject="題名"
contents="本文"

for i in ${address[@]}
do
    echo "$contents" | mail -s "$subject" "$i"
done

WindowsでVimを使う時の設定

WindowsでVimを使うには香り屋で配布されているVimがありますが、この設定方法を備忘録として残しておきます。

—-

まずはVimの実行方法について

ダウンロードしたzipファイルを解凍したら、その中のgvim.exeが実行ファイルとなるので、Vimを使いたいファイルの拡張子をgvim.exeで起動すればVimが使える

 

次は設定ファイルについて

「vimrc」と「gvimrc」に書いてあるように個人設定は「_vimrc」と「_gvimrc」を作成して、そこに記述するとのことなのでこの2つのファイルを作成

 

  • _vimrc

CUIの設定
普段Linuxで使用している.vimrcをコピー

  • _gvimrc

GUI用の設定
今回は以下の通りに設定

"色テーマの設定
colorscheme koehler

"半角文字のフォント設定
set guifont=Source_Code_Pro:h12
"全角文字のフォント設定
set guifontwide=MeiryoKe_Gothic:h12

 

これで完了
やっぱVim最高

CentOS6.6にownCloud8.0インストール

以前から気になっていたownCloudをインストールした時のログです。

まず始めに、ownCloudの推奨環境を調べたところ

  • PHP 5.4以上
  • MySQL 5.5.31以上

という記事を見つけたので上記パッケージを持っているremiリポジトリを追加し、アップデート、apacheの再起動

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# yum update --enablerepo=remi mysql*
# service httpd restart

MySQLをアップデートする際に、依存関係によりPHPもアップデートしてくれたので上記コマンドでバージョンアップ終了

 

(余談)
ブログ執筆時に公式サイトを見に行ったらMySQLについて

  • MySQL/MariaDB 5.x

という記述を見つけたのでMySQLは無理して5.5にバージョンアップしなくてもよかった。。
(余談終わり)

 

次に、データベース作成

# mysql -u root -p
mysql> create database owncloud default character set utf8;
mysql> grant all privileges on owncloud.* to owncloud@localhost identified by '(パスワード)';
mysql> flush privileges;
mysql> quit

 

ownCloudをダウンロード
(2015年4月11日時点での最新安定版はバージョン8.0.2)

# wget https://download.owncloud.org/community/owncloud-8.0.2.tar.bz2
# tar jxvf owncloud-8.0.2.tar.bz2

 

解凍したディレクトリをDocumentRoot以下に配置し、オーナーを変更

# cp -r owncloud /var/www/ssl/
# chown -R apache:apache /var/www/ssl/owncloud/

 

データ用のディレクトリを別に作成し、オーナーを変更

# mkdir /data/owncloud
# chown -R apache:apache /data/owncloud/

 

ブラウザでownCloudを配置したディレクトリにアクセスすれば、初期設定画面が出てくるので、ユーザ名とパスワードを登録
(この時にPHP関連のパッケージが入っていないというメッセージが表示されたら適宜インストール)
(例)

# yum install --enablerepo=remi php-gd

初期設定画面
初期設定画面

 

「ストレージとデータベース」をクリックして、データ用ディレクトリとDB(MySQL/MariaDB)の設定を入力する

初期設定画面2
初期設定画面2

 

「セットアップを完了します」をクリックすれば完了

ownCloudのページ
ownCloudのページ

 

追記(2015年4月12日)

ファイルアップロードの上限値が2MBだったので、その上限値を1GBに変更

# vim /etc/php.ini
memory_limit = 1G
post_max_size = 1G
upload_max_filesize = 1G

# service httpd reload

CentOS6.5にfmlを導入

ConoHaでメールサーバを構築するで構築したメールサーバにfmlを導入してメーリングリスト(ML)機能を追加したので、その時のログです。
fmlを導入する際には、管理・運用体制をどのようにするかによってインストール方法が変わるのですが、今回は「グループfmlに所属しているユーザはMLの作成ができる」を運用ポリシーにしました。

fmlの実行スクリプトはperlで書かれているが、そのファイル内ではパスが「/usr/local/bin/perl」と指定されていて、元のパス(「/usr/bin/perl」)とは違っているのでシンボリックリンクを追加

# ln -s /usr/bin/perl /usr/local/bin/perl

グループfmlとユーザfmlを作成

# groupadd fml
# useradd -g fml fml

自分が普段使用している一般ユーザ(username)をグループfmlに追加

# vim /etc/group
fml:x:501(←ここの数字は環境によって違う):username

ディレクトリ作成とオーナー・権限変更

# mkdir /usr/local/fml
# mkdir /var/spool/ml
# chown fml:fml /usr/local/fml
# chown fml:fml /var/spool/ml
# chmod g+ws /var/spool/ml

fmlをインストールするディレクトリへ移動し、fmlのソースコードをダウンロード、fmlをインストール

# cd /usr/local/src

# wget ftp://ftp.fml.org/pub/fml/stable/fml-4.0-stable-20040215.tar.gz
# tar zxvf fml-4.0-stable-20040215.tar.gz

# cd fml-4.0-stable-20040215
# su fml
$ perl makefml install
unshift(@INC, /usr/local/src/fml-4.0-stable-20040215/src)
---NOT USING configuration file (for the first time)

THIS HOST (www.tetsis.com) IS [x86_64-unknown-linux-gnu]

---Please Define Your Fml System Configurations

Personal Use or ML-Admin-Group-Shared or fmlserv you use?
Personal, Group, Fmlserv (personal/group/fmlserv) [personal] group

Please define the group (in /etc/group) ML Operators use
Group of Mailing List Operators (fml or GID ([\w\d]+)) [fml]

DOMAIN NAME               [tetsis.com]
FQDN                      [www.tetsis.com]
EXEC FILES DIRECTORY      [/usr/local/fml]
TOP LEVEL ML DIRECTORY    [/var/spool/ml]

Language (Japanese or English) [English] Japanese

TimeZone (TZ: e.g. +0900, -0300) [+0900]

--- summary ---
DOMAIN: tetsis.com
FQDN: www.tetsis.com
EXEC_DIR: /usr/local/fml
ML_DIR: /var/spool/ml
Language: Japanese
TimeZone: +0900

15/03/29 00:27:04 makefml::mkdir /usr/local/fml/.fml (fml)

The current configuration is saved in /usr/local/fml/.fml/system

---Install the Fml system to /usr/local/fml. (y/n) [n] y

(以下インストールが始める)

$ exit

Postfixの設定を変更してPostfixを再起動

# vim /etc/postfix/main.cf
allow_mail_to_commands = alias, forward, include

# service postfix reload

テストMLを作成し、Postfixの設定を変更して、Postfixを再起動
(ここはmain.cfの設定を一度で済ませたいところだが、最初にalias_mapsとalias_databaseを変更すると、newmlを実行した際に/var/spool/etc/aliasesファイルがないとかで、処理が途中で止まってしまう。なので一旦newmlによりMLを作成し、aliasesファイルが生成された後にalias_mapsとalias_databaseに設定を加える流れを採用した。もっとスマートなやり方があればご教授願いたい)

# su fml
$ /usr/local/fml/makefml newml fml-test
$ exit

# vim /etc/postfix/main.cf
alias_maps = hash:/etc/aliases, hash:/var/spool/ml/etc/aliases
alias_database = hash:/etc/aliases, hash:/var/spool/ml/etc/aliases

# service postfix reload

newaliasesを実行し、aliases.dbファイルを生成
そして、aliases.dbのオーナー・権限を変更

# newaliases

# chmod 666 aliases.db
# chown root:root aliases.db

これによりfmlの導入は完了

あとはaddコマンドでメンバーを追加すればMLとして使用できる

$ /usr/local/fml/makefml add fml-test (メールアドレス)

 

おまけ

毎回makefmlする度に「/usr/local/fml/makefml」と打つのは面倒なのでシンボリックリンクによりパスを通す

# ln -s /usr/local/fml/makefml /usr/bin/makefml

 

(2015/06/19追記)

ずっと探していたテンプレートファイルの場所が分かった

/usr/local/fml/etc/makefml/cf

これを変更することでnewmlした際に作成されるML内のcfに反映される
でも、それよりもコマンドのほうが分かりやすいかも

$ makefml config-template

このコマンドで設定したファイルは「/var/spool/ml/etc/makefml/cf」に作成され、上記と同様にnewmlした際に反映される
ただしこの場合はcfファイルの権限をグループfmlに与えなければfmlグループの他のユーザが作成したMLには反映されないので注意

(参考文献)
http://www.fml.org/fml/INSTALL/9.html

http://www.fml.org/software/fml8/Documentation/ja/tutorial/changes.cui.html

ConoHaでメールサーバを構築する

ConoHaでメールサーバを構築しようとしたのだけれど薄い本(専門書)の設定をしただけではメールができなかったので、いろいろ調査して設定を試してみたらメールサーバが完成したので、その時のログです。
また、途中に参考にさせて頂いたサイトのリンクを載せています。

まずはConoHaの薄い本通りに設定

この時、/etc/postfix/main.cfの最後の設定(smtpd_recipient_restrictions)の項目はカンマかもしくは改行した時にスペースが必要
参考にしたのはこちら

それから、今回構築するメールサーバはドメインtetsis.com全体のメールサーバにする予定なのでmydestinationsを以下の様に変更

/etc/postfix/main.cf

mydestination = $myhostname, localhost.$mydomain, localhost
↓
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

それから、私の環境ではISPが25番ポートの通信を遮断しているみたい(OB25B)なので通常のSMTPではサーバと通信できないのでSubmission(587番)ポートを使ってサーバと通信するように設定
参考にしたのはこちら

/etc/postfix/master.cf

#submission inet n       -       n       -       -       smtpd
↓(コメントを外す)
submission inet n       -       n       -       -       smtpd

ここまででローカル配送ができる
しかし、Gmail配送できない。ログを見るとIPv6で通信しているので今回は通信をIPv4に限定する

/etc/postfix/main.cf

inet_protocols = all
↓
inet_protocols = ipv4

これでGmailに配送できる
しかし、迷惑メールトレイに入れられてしまうので、DNSにSPFレコードを追加する

以下の図はDNSのお名前.comにSPFレコードを登録した状態
VALUE部分は「v=spf1 +ip4:(IPアドレス) ~all」にする
参考にしたのはこちら
spf

ここまででGmailの受信トレイに入れられる
一応ConoHaにメールサーバを構築する目標が達成

メールの暗号化

SMTPS、POP3S、IMAPSに対応させる

まずは自己証明書を作成する

[root@www ~]# cd /etc/pki/tls/certs
[root@www certs]# make server.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
.........................................+++
...............................+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
[root@www certs]# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key
[root@www certs]# make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []                                      ~
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.tetsis.com
Email Address []:info@tetsis.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@www certs]#
[root@www certs]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=JP/L=Default City/O=Default Company Ltd/CN=www.tetsis.com/emailAddress=info@tetsis.com
Getting Private key
[root@www certs]# cp server.key ../private/

最後にPostfixとDovecotの設定をする

/etc/postfix/main.cfに以下を追加

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/private/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s

/etc/postfix/master.cfの以下のコメントを外す

smtps     inet  n       -       n       -       -       smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

/etc/dovecot/conf.d/10-sslを以下のように修正

#ssl = yes
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
↓
ssl = yes
ssl_cert = </etc/pki/dovecot/certs/server.crt
ssl_key = </etc/pki/dovecot/private/server.key

/etc/dovecot/conf.d/10-master.confを以下のように修正

service imap-login {
inet_listener imap {
#port = 143
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}

service pop3-login {
inet_listener pop3 {
#port = 110
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}

参考にしたのはこちらこちらこちら

最後にPostfixとDovecotを再起動する

# service postfix restart
# service dovecot restart

convertコマンドで解像度を指定する

gnuplotで出力されるepsファイルをpngファイルに変換するために使っているconvertコマンドで解像度を指定する方法です。

調べるたびにqualityが出てきて、あれなんか違う。。ってなるので備忘録として

convert -density 800 graph.eps graph.png

densityオプションを使う
数字は大きければ大きいほど解像度が良くなるみたい

CentOS6.5にてネットワーク内のWindowsから誰でもアクセスできるネットワークドライブ作成(論理ボリューム使用)

今回やったのは2つ

  1. Sambaを使ってWindowsから誰でもアクセスできるネットワークドライブを作成する
  2. 論理ボリュームを作成したHDDをネットワークドライブ領域用にマウントする
    (論理ボリュームを使うのは、後々HDDを増設してネットワークドライブの容量を簡単に増加させるため)

Sambaを使ってWindowsから誰でもアクセスできるネットワークドライブを作成する

これはこのサイトを参考にさせて頂きました

なのでここでは省略

論理ボリュームを作成したHDDをネットワークドライブ領域用にマウントする

今回ネットワークドライブ領域用に使うHDDはsdbとして認識されている

(2015/01/25追記)
まずLVM用のパーティションを作成する
今回のHDDはAFTなのでパーティションはセクタで指定したいので-uオプションをつける

# fdisk -u /dev/sdb
コマンド (m でヘルプ):n
コマンドアクション
e   拡張
p   基本パーティション (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-4294967294, default 1): 2048
終点 シリンダ または +サイズ または +サイズM または +サイズK (2048-4294967294, default 4294967294):(空Enter)
コマンド (m でヘルプ): t
選択した領域 1
16進数コード (L コマンドでコードリスト表示): 8e
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
# pvcreate /dev/sdb1
# vgcreate vg_storage /dev/sdb1
# lvcreate -l 100%FREE -n lv_storage vg_storage
# mkfs -t ext4 /dev/mapper/vg_storage-lv_storage
# mount -t ext4 /dev/mapper/vg_storage-lv_storage /home/share

再起動してもマウントされるように/etc/fstabに記載

(末尾に以下を追加)
/dev/mapper/vg_storage-lv_storage /home/share	ext4	defaults	1 2

完了

今後の課題として・・・
ファイルシステムにNTFSを使ってみたかったけどできなかった
でもext4の最大ボリュームサイズは1EBらしいから将来1EBのネットワークドライブが作れるかもw
(NTFSの最大ボリュームサイズは256TB)

WordPressのサーバを移行する(同一ドメイン)

自宅のサーバから某VPSにブログを移行したときのログです

移行するデータは次の2つ

  • ドキュメントルート内にあるWordPress用のディレクトリ
  • WordPressのデータベース(MySQL)

まずは上記の2つをhomeにコピー

cp -a /var/www/html/blog .
mysqldump -u root -p wordress > wordpress.dump

(-pはコマンドを打った後にパスワードを入力するオプション)

次はデータをtarで固めてデータを移行

移行元サーバで以下のコマンドを実行

tar zcvf blog-data.tar.gz blog wordpress.dump

移行先のサーバで以下のコマンドを実行

tar zxvf blog-data.tar.gz

あとは、WordPressディレクトリをドキュメントルート内に移動し、データベースを新規作成し、復元

$ mysql -u root -p

MariaDB [(none)]> CREATE DATABASE wordpress CHARACTER SET utf8;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> \q
Bye

$ cp -a blog /var/www/html/
$ mysql -u root -p wordpress < wordpress.dump

ここまでの作業が終わると
http://(移行先のIPアドレス)/blog/
にアクセスするとブログを確認できる

最後にDNSサーバにてAレコードを変更すれば完了

Windows8.1のコマンドプロンプトにjavaコマンドをインストール

Windows8.1のコマンドプロンプトでjavaコマンドを使えるようにしたときのログです

 

まずOracleのWebサイトからJava SEをダウンロードする
http://www.oracle.com/technetwork/java/javase/downloads/index.html
本ブログ執筆時(2014/12/17)のバージョンは8u25

Javaのダウンロード1
Javaのダウンロード1

 

ライセンスの同意にチェックして、インストールファイルをダウンロード
私の環境はWindows8.1の64bit版なので、今回は「Windows x64」を選択

Javaのダウンロード2
Javaのダウンロード2

 

ダウンロードしたファイルを実行
特に理由がなければすべて「次」でOK
(インストール先を変更しても動作するのは確認済み)

Javaのインストール1
Javaのインストール1

Javaのインストール2
Javaのインストール2

Javaのインストール3
Javaのインストール3

Javaのインストール4
Javaのインストール4

 

最後にJavaを環境変数に追加する
「コントロールパネル」>「システムとセキュリティ」>「システム」>「システムの詳細設定」と選択

「環境変数」をクリック

パスの設定1
パスの設定1

 

「システム環境変数」内の「Path」を選択して、編集をクリック

パスの設定2
パスの設定2

 

「変数値」にJavaプログラムがあるフォルダを追加する
今回は「C:\Program Files\Java\jdk1.8.0_25\bin」を追加する
(他のパスと区切るため、パスの前に「;」をつけるのを忘れずに)

パスの設定3
パスの設定3

 

これでコマンドプロンプトでJavaが実行できることを確認

Javaコマンドをコマンドプロンプトから確認
Javaコマンドをコマンドプロンプトから確認

 

他のアプリケーションがJavaを使えるようにするためには環境変数に「JAVA_HOME」を追加する必要があるが、Javaをコマンドプロンプトだけで使うのであれば必要ないので今回はここまで