カテゴリー別アーカイブ: Linux

Scientific Linux 6.1からさくらのメールボックスへメールを転送させる

この記事は2011/11に掲載されたものです。
記事の内容が古くなっている為、現状と異なる可能性があります。

cronやシステム管理メールを自分のメールアドレスへ転送する方法をよく忘れてしまうので
メモをとっておきます。

SL6をほぼ最小構成にてインストールした場合、mailコマンドが入っていない場合があるようです。
そこでまずはメールを送信できる状態にします。

yum install mailx cyrus-sasl cyrus-sasl-plain cyrus-sasl-lib

SL6のメールコマンドはmailxパッケージを使用するようです。実態はmailxにシンボリックリンクが張られています。

ls -al /bin/ | grep mail
lrwxrwxrwx   1 root root    5 11月  9 08:45 2011 mail -> mailx
-rwxr-xr-x   1 root root 370K 11月 24 03:53 2010 mailx

また、cyrus-saslパッケージはメール転送時のSMTP認証に使用するので同時にインストールしておきました。

そしてCentOS5系からの違いとしてMTAがpostfixになっているようですので、postfixの設定を変更していきます。
まずは転送先の設定から。

cd /etc/postfix
vi authinfo

<~>を各自の情報で書き換えます。

[<メールサーバアドレス>]:587 <ユーザ名(hoge@examples.com)>:<パスワード>

認証情報を書いた後はDB化を行っておきます。

postmap authinfo

postfixの設定ファイルを書き換えてローカルのメールをさくらのメールボックスへ転送するようにします。

vi main.cf
myhostname = <ホスト名>
mydomain = <ドメイン名>
myorigin = $myhostname
mydestination = $myhostname, localhost.localdomain, localhost.$mydomain, localhost
relayhost = [<メールサーバアドレス>]:587

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

設定が終わったらpostfixに設定を再読込させます。

service postfix reload

次にローカルのメールを個人のメールアドレスに転送する為にaliasesを編集します。

自分のサーバではrootを個人アカウントに転送した後、個人のメールアドレスに転送させています。

vi /etc/aliases
root:       <ユーザ名>
<ユーザ名>: <転送先メールアドレス>

編集が終わったら適応させるためにnewaliasコマンドを発行しておきます。

newaliases

最後にテストとしてメールを送信させて、受信できることを確認します。

echo test | mail root
echo test | mail <ユーザ名>

他のWebサーバを使いつつ「さくらのメールボックス」でメールを管理する方法

この記事は2011/6に掲載されたものです。
記事の内容が古くなっている為、現状と異なる可能性があります。

現在、使用しているWebサーバをCoreServerからさくらのVPSへ変更する為に細々と作業をやっているのですが、メールサーバの管理は面倒かつ踏み台の危険性等を考慮するとあまり自分で管理したくありません。
そこで年間1000円のメールボックスサービスであるさくらのメールボックスを使用することにしました。

続きを読む 他のWebサーバを使いつつ「さくらのメールボックス」でメールを管理する方法

gitにpushしたwebサイトを自動的に同期させる

この記事は2011/4に掲載されたものです。
記事の内容が古くなっている為、現状と異なる可能性があります。

earthquake_jpに関連して作業したので備考録としてメモ。

前提

gitのリモートリポジトリとHTTPサーバが同一のサーバに存在している状態です。

別サーバで行う場合はgit cloneを行う際にパス無し秘密鍵でcloneして
おかないと上手く動作しないと思われます。

処理の流れ

開発者 → コミット → プッシュ → post-receive → Web API → git pull

失敗

  • 最初はpost-receiveでpullを発行しようとしたが、HTTPサーバとgitosisの権限が異なる。
  • sudoを発行してみたが、エラーが発生して処理が行えない。

結果

  • post-receiveはWeb APIへとアクセスする。
  • Web APIはHTTPサーバの権限で動作する。
  • Web APIではシェルスクリプトを実行する。
  • HTTPサーバの権限でpullが行われる。

リポジトリ.git/hooks/post-receive

#!/bin/sh
wget -q -O - http://APIのURL

API(update.php)

<?php
$cmd = dirname(__FILE__) . '/update.sh';
$res = system($cmd);
if (false === $res) {
    echo "NG\n";
} else {
    echo "OK:{$res}\n";
}

シェルスクリプト(update.sh)

#!/bin/sh
cd /var/www/html/
/usr/bin/git --git-dir=/var/www/html/.git pull

post-receive、update.shは実行権限を付加するのを忘れずに。update.phpはweb上から実行可能であれば問題ない。

念の為、127.0.0.1か自身のグローバルIPでのみアクセス可能にしている。

AsakusaSatelliteをPassengerで動かしてみる。

この記事は2011/3に掲載されたものです。
記事の内容が古くなっている為、現状と異なる可能性があります。

AsakusaSatelliteをまだ個人的な試用中ですが、期待ageしつつ実験してみました。

AsakusaSatellite は、開発者向けのリアルタイムチャットアプリケーションです。開発者間のコミュニケーション品質を向上し、ソフトウェア開発にリズムをもたらします

AsakusaSatelliteのページを参考にしつつ、Passengerで動くように設定していきます。

Passenger自体はredmine用に入れていたのを利用したので下記資料には書いていません。

また、筆者はruby環境についてはあまり詳しくないので、その辺を考慮に入れておいてください。


$ cd /vaw/www
$ git clone git://github.com/codefirst/AsakusaSatellite.git
$ cd AsakusaSatellite
$ cp config/filter.yml.example config/filter.yml
$ cp config/websocket.yml.example config/websocket.yml
$ cp config/settings.yml.example config/settings.yml
$ vi config/filter.yml
   1 - name: auto_link
   2 - name: redmine_ticket_link
   3   roots: 
   4   project: 
   5 - name: twitter_link
   6 - name: code_highlight_filter

$ vi config/websocket.yml
  1 roots: 0.0.0.0/satellite # AsakusaSatelliteのPassengerでマッピングするURL
  2 websocketPort: 18081
  3 httpPort: 18080
  4 use_rails_ssl: false

$ bundle install --path vendor/bundle
$ rake groonga:migrate RAILS_ENV=production
$ sudo chown -R apache:apache AsakusaSatellite

$ sudo vi /etc/httpd/conf/httpd.conf

   #   ServerName_
      DocumentRoot /var/www/html
      RailsBaseURI /redmine
      RailsBaseURI /satellite
      ErrorLog /var/log/httpd/error.log
      CustomLog /var/log/httpd/access.log combined

         AllowOverride all
         Options -MultiViews

$ ln -s /var/www/AsakusaSatellite/public/ /var/www/html/satellite
$ sudo service httpd restart
$ ruby websocket/server.rb &

各リソースをgz圧縮して転送量を抑える

この記事は2011/2に掲載されたものです。
記事の内容が古くなっている為、現状と異なる可能性があります。

ライブラリに関してはCDNのキャッシュを使う事も出来ますが、自作のライブラリやCSS等のリソースはCDNには登録されていないので
ファイルの転送サイズが膨れがちです。

そこで対応ブラウザの場合はリソースファイルをgz圧縮して転送するように設定する方法を備考録として書いておきます。

参考サイト

前提

転送数を減らす為にCSSとかJavaScriptとかで1ファイルにまとめられるものはまとめておく。

それに加えて圧縮をかける事により転送するデータ量を減らします。

また、gz圧縮できるアーカイバが必要。

ファイルの圧縮

まずは対象のファイルをgz圧縮します。

gz圧縮は1ファイルしか圧縮できない形式なので、まず、CSSやJavaScriptファイルを1つにまとめておきます。

別にまとめなくともこの手法は有効ですが、転送数が多いままになってしまうことと、読み込み方法によってはシリアルで読み込んでしまうのでまとめておく方が早いです。

まとめたファイルをgz圧縮します。自分の場合、windowsではExplzh、mac/linuxの場合はgzip -c [ファイル名] > [ファイル名].gzを使用しています。

.htaccessの作成

gzファイルが存在する場合はgzファイルを読み込むように設定をします。

最近は使えるサーバが多くなっていますが、mod_rewriteがサーバに入っていないと使えません。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{REQUEST_FILENAME} !.gz$
    RewriteCond %{REQUEST_FILENAME}.gz -s
    RewriteRule .+ %{REQUEST_URI}.gz

    <FilesMatch ".html.gz$">
        ForceType text/html
        AddEncoding x-gzip .gz
    </FilesMatch>

    <FilesMatch ".txt.gz$">
        ForceType text/plain
        AddEncoding x-gzip .gz
    </FilesMatch>

    <FilesMatch ".js.gz$">
        ForceType application/x-javascript
        AddEncoding x-gzip .gz
    </FilesMatch>

    <FilesMatch ".css.gz$">
        ForceType text/css
        AddEncoding x-gzip .gz
    </FilesMatch>
</IfModule>

まず、mod_rewriteでgzファイルが存在する場合にはアクセスされたファイル名.gzを読み込むように切り替えています。

そして、FileMatchでファイル毎にMIME-TYPEとgzエンコードを指定しています。

これによってgz圧縮ファイルに対応しているブラウザの場合はgzファイルを読み込めるようになります。

更に高速化

これだけでファイルのサイズが下がりますが、キャッシュで持たせるようにしておきます。

これも.htaccessに記述する事によって利用可能です。

ExpiresActive on
ExpiresDefault "access plus 1 month"
FileETag None

ThinkPadのリカバリが見えなくなって修復した

この記事は2011/1に掲載されたものです。
記事の内容が古くなっている為、現状と異なる可能性があります。

ざっとメモ。

IBM版だけどThinkpadにCentOSを入れてたが、MBRが書き換えられてしまってリカバリ領域が見えなくなったので無理やり。

grubのメニューまで行ったら矢印動かしたりしてブートを止める。
そしてcを押してコマンドラインモードに移行する。

そして下記の順にコマンドを実行したら無事リカバリが起動した。

grub> root (hd0,1)
grub> parttype (hd0,1) 0x0b
grub> unhide (hd0,1)
grub> chainloader +1
grub> boot