このブログを検索

2013-10-19

CentOSで固定IPの設定

CentOS6.3(6.2?)で固定IPの設定
この辺ってディストリビューションによって異なるから面倒。


# vi /etc/sysconfig/network-scripts/ifcfg-eth0
--------------------------------------------------------------------------------
DEVICE=”eth0”
BOOTPROTO=”static”
HWADDR=”・・・”
ONBOOT=”yes”
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=192.168.1.1
IPADDR=192.168.1.11
NETMASK=255.255.255.0
--------------------------------------------------------------------------------
# /etc/init.d/network restart

おまけ
うまくいかなかったけどDHCPでIP取得
これで良かったはずなんだけど・・・
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
--------------------------------------------------------------------------------
DEVICE=”eth0”
BOOTPROTO=”dhcp”
HWADDR=”・・・”
ONBOOT=”yes”
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=192.168.1.1
--------------------------------------------------------------------------------
# /etc/init.d/network restart


CentOSにMercurialをインストールする

CentOS6.3(6.2?)にMercurialをインストールする。
この際、特にWEBサーバーのインストールに躓いたのでメモを残す。
バージョン違いなのか、ネット上の情報通りにやってもうまくいかない。
ただ、認証方法周りはあまり動作確認していなかったかも。結構前の手順メモ。
やりたかったことはhttp(s)プロトコル経由でhgコマンドを動かし、URLにユーザー名を含めた認証にしたかったけど、
この手順で本当にできたかは記憶が定かではない。場合によっては修正や追加が必要かも。


ポート開放
# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10443 -j ACCEPT

# useradd -m hg
# passwd hg
パスワード
# gpasswd -a apache hg

# yum install python-devel
# yum install make
# yum install gcc
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
# easy_install -U mercurial

メモ:hgweb.cgiインストール場所
/usr/share/doc/mercurial-1.4/hgweb.cgi
メモ:apacheインストール場所(デフォルト)
/etc/httpd

# mkdir /var/www/hg
# su hg
# mkdir /var/www/hg/test
# chmod 775 /var/www/hg/test
# cd /var/www/hg/test
# hg init

# vi /var/www/hg/test/.hg/hgrc
[web]
push_ssl = false
allow_push = *
contact = xxx@xxx.xxx
name = xxxx
description = xxxx

# vi /var/www/hg/hgweb.config
[paths]
test = /var/www/hg/test

簡易サーバー
# hg serve -p 8080 --webdir-conf /var/www/hg/hgweb.config &
http://localhost:8080/

apacheサーバー
# mkdir /var/www/cgi-bin/hg
# cp /usr/share/doc/mercurial-1.4/hgweb.cgi /var/www/cgi-bin/hg/.
# chown apache:apache /var/www/cgi-bin/hg/hgweb.cgi
# chmod 755 /var/www/cgi-bin/hg/hgweb.cgi

# vi /var/www/cgi-bin/hg/hgweb.cgi

コメントアウト解除
--------------------------------------------------------------------------------------
import sys
--------------------------------------------------------------------------------------
コメントアウト
--------------------------------------------------------------------------------------
#sys.path.insert(0, "/usr/lib/python2.6/site-packages/")
--------------------------------------------------------------------------------------

追記
--------------------------------------------------------------------------------------
config = "/var/www/hg/hgweb.config"
--------------------------------------------------------------------------------------

コメントアウト解除
--------------------------------------------------------------------------------------
import os
os.environ["HGENCODING"] = "UTF-8"
--------------------------------------------------------------------------------------
そのしたに追記
--------------------------------------------------------------------------------------
os.environ["HGRCPATH"] = "/etc/httpd/conf/hgrc"
--------------------------------------------------------------------------------------

コメントアウト
--------------------------------------------------------------------------------------
#from mercurial.hgweb.hgweb_mod import hgweb
#import mercurial.hgweb.wsgicgi as wsgicgi
--------------------------------------------------------------------------------------
追記
--------------------------------------------------------------------------------------
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
--------------------------------------------------------------------------------------

結果
--------------------------------------------------------------------------------------
#!/usr/bin/python
import sys
from mercurial import demandimport; demandimport.enable()
config = "/var/www/hg/hgweb.config"
import os
os.environ["HGENCODING"] = "UTF-8"
os.environ["HGRCAPATH"] = "/etc/httpd/conf/hgrc"
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
wsgicgi.launch(application)
--------------------------------------------------------------------------------------

# vi /etc/httpd/conf/hgrc
[trusted]
users = hg
groups = hg

# cd /var/www/hg/test
# chmod g+w .hg .hg/* .hg/store/*
# chmod g+s .hg .hg/store .hg/store/data

参考:
http://d.hatena.ne.jp/kokutoto/20090505/p1
http://d.hatena.ne.jp/eldesh/20110125/1295938971
http://d.hatena.ne.jp/takuya_1st/20120120/1327028570
http://blog.oklab.org/?tag=mercurial
http://d.hatena.ne.jp/tututen/20100721/1279738184

自己証明(適当、Redmineインストールの記事の方が適切)
# cd /etc/httpd/conf
# openssl genrsa -out server.key 1024
# openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf
パスワード
# openssl x509 -in server.csr -out server.crt -req -signkey server.key

# vi /etc/httpd/conf/httpd.conf
追記・・・だけど、もとからconfは全て読むしmod_sslはssl.confに書かれてるし、作業の必要なし
--------------------------------------------------------------------------------------
LoadModule ssl_module modules/mod_ssl.so
include /etc/httpd/conf.d/ssl.conf
--------------------------------------------------------------------------------------
変更(http用の設定だけどポートは閉じるので意味なし)
--------------------------------------------------------------------------------------
#Listen 10080
ServerName localhost:10080

<Directory "/var/www/html/">
AuthDigestProvider file
AuthType Digest
AuthName "Secret Zone"
AuthDigestDomain /
AuthUserFile /etc/httpd/.htdigest
Require valid-user
・・・
</Directory>
--------------------------------------------------------------------------------------

# yum install mod_ssl
# vi /etc/httpd/conf.d/ssl.conf
変更
--------------------------------------------------------------------------------------
Listen 10443
--------------------------------------------------------------------------------------
新規
--------------------------------------------------------------------------------------
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
--------------------------------------------------------------------------------------
変更
--------------------------------------------------------------------------------------
<VirtualHost _default_:10443>
--------------------------------------------------------------------------------------

変更
--------------------------------------------------------------------------------------
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
--------------------------------------------------------------------------------------

追記
--------------------------------------------------------------------------------------
<Directory "/var/www/cgi-bin/">
AuthDigestProvider file
AuthType Digest
AuthName "Secret Zone"
AuthDigestDomain /
AuthUserFile /etc/httpd/.htdigest
Require valid-user
・・・
</Directory>
--------------------------------------------------------------------------------------


# htdigest -c /etc/httpd/.htdigest 'Secret Zone' hg
--------------------------------------------------------------------------------------
パスワード入力:
--------------------------------------------------------------------------------------

このままだと10443とかにポート変更した影響でSELinuxが邪魔する
# yum install policycoreutils-python
確認
# semanage port -l | grep http
# semanage port -a -t http_port_t -p tcp 10080
# semanage port -a -t http_port_t -p tcp 10443

# /etc/init.d/httpd restart

接続確認
https://localhost:10443/cgi-bin/hg/hgweb.cgi

hg clone
ソース:https://hg@localhost:10443/cgi-bin/hg/hgweb.cgi/test/
ソース:ssh://hg@localhost//var/www/hg/test



CentOSにruby1.8を入れる

CentOS6.3(6.2?)にruby1.8を入れる際に躓いたのでメモ
rpm -i の際に他にもオプションがいるっぽい

# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p374.tar.gz
# tar zxvf ruby-1.8.7-p374.tar.gz
# cd ruby-1.8.7-p374
# ./configure
# make
# checkinstall --fstrans=no
# rpm -ivh --nodeps --nomd5 /root/rpmbuild/RPMS/i386/ruby-1.8.7-p374-1.i386.rpm
※普通にrpm -i とやるとフォルダが不足してるようなエラーが出るので無視
※無視以外の方法もネットにあるけどそれやるとrubyコマンドでセグメンテーション違反とでる

# vim /etc/profile
Make the section with pathmunge look alike like this:
2行追記(あんま意味わかってない)
--------------------------------------------------------------------------------
#Path manupulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/bin # ADDED THIS
else
pathmunge /usr/local/bin after # ADDED THIS
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
pathmunge /sbin
fi
--------------------------------------------------------------------------------
# source /etc/profile


RPMパッケージを作成する方法

Linuxでソースからビルドする必要があるアプリケーション。
パッケージ管理ツールで管理できないので不便です。
そこで試しにrubyをパッケージ化する方法をメモします。
全てのアプリケーションはできないと思いますが、ちゃんとしたアプリケーションなら恐らく対応できるんじゃないかと思います。
(要件をちゃんとしらべてません)

環境はCentOS6.3(6.2?)だったはず。

# yum install -y make gcc wget gettext
# yum install -y zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel ncurses-devel gdbm-devel readline-devel sqlite-devel

checkinstallのインストール
# mkdir -p /root/rpmbuild/SOURCES
# yum -y install git gcc rpm-build
# cd /usr/local/src
# git clone http://checkinstall.izto.org/checkinstall.git/
# cd checkinstall
# make && make install
# checkinstall

デフォルトのまま進んでいく。
RPMかどうか選ぶところではRPMを選ぶ。

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

# ls -l /etc/yum.repos.d/epel* /etc/yum.repos.d/remi.repo
とやって

/etc/yum.repos.d/epel.repo
/etc/yum.repos.d/epel-testing.repo
/etc/yum.repos.d/remi.repo
が出れば成功

参考:
http://www.google.com/url?q=http%3A%2F%2Ftnakamura.hatenablog.com%2Fentry%2F20120226%2Finstall_the_ruby_to_centos&sa=D&sntz=1&usg=AFQjCNH2he-ba_1g2c4_wGB9iphMiYMj6w


おまけ ソースからインストールした場合に単純にファイルを削除する方法
# cd /usr/local/src/ruby-1.9.1-p429
# cat .installed.list | xargs rm


お名前.comレンタルサーバーにRedmine2.3を入れる

最初、さくらレンタルに入れようとしていたRedmine。
root権限がある環境でやった方が確実で速い、そしてそうじゃないとまともに動かないということに気づいたので
お名前.comレンタルサーバー VPS(KVM)に入れてみました。
注意点はrubyを入れる際にrbenvだと普通はroot権限用になってしまうことくらいでしょうか。
環境による不都合はほぼありませんでした。

Redmine/Mercurial/SSL証明書を入れていきます。
[コントロールパネル操作]
■OSインストール
VPSコントロールパネルに繋ぐ
OS再インストール CentOS6.2を選択
SSH Private Keyと公式ヘルプを用い、SSH接続で接続できるようにする


[SSH]
■OSセットアップ
・yum高速化
# yum -y install yum-fastestmirror
# yum update

・vim入れる
# yum -y install vim

・locate入れる
# yum -y install mlocate
# updatedb

・firewall設定
※詳しくないので参考までに
# vim /etc/sysconfig/iptables
--------------------------------------------------------------------------------------
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

#既にconnectionが張られている通信を許可,TCPの接続開始と応答、FTPデータなどを許可
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#icmp(ping) 許可
-A INPUT -p icmp -j ACCEPT
#ローカルホストの入力許可
-A INPUT -i lo -j ACCEPT

# FRAGMENT DROP ###
-A INPUT -f -j LOG --log-level debug --log-prefix 'FRAGMENT-DROP:'
-A INPUT -f -j DROP
#### PING OF DEATH ###
-N PINGOFDEATH
-A PINGOFDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A PINGOFDEATH -j LOG --log-level debug --log-prefix 'PINGDEATH-DROP:'
-A PINGOFDEATH -j DROP
-A INPUT -p icmp --icmp-type echo-request -j PINGOFDEATH
#### BROAD MULTI DROP ###
-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -d 224.0.0.1 -j DROP
#### 113IDENT ###
-A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
#### SYNFLOOD ###
-N drop_synflood
-A drop_synflood -m limit --limit 10/s --limit-burst 20 -j RETURN
-A drop_synflood -j LOG --log-prefix "SYNFLOOD: " -m limit --limit 1/s --limit-burst 10
-A drop_synflood -j DROP
-A INPUT -p tcp --syn -j drop_synflood

#SSH許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

#Web許可
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 3000 -j ACCEPT
#FTP許可
#-A INPUT -p tcp --dport 20 -j ACCEPT
#-A INPUT -p tcp --dport 21 -j ACCEPT
#-A INPUT -p tcp --dport 4000:4029 -j ACCEPT
#MAIL許可
#-A INPUT -p tcp --dport 25 -j ACCEPT
#-A INPUT -p tcp --dport 465 -j ACCEPT
#-A INPUT -p tcp --dport 110 -j ACCEPT
#-A INPUT -p tcp --dport 995 -j ACCEPT
#-A INPUT -p tcp --dport 143 -j ACCEPT
#-A INPUT -p tcp --dport 993 -j ACCEPT

#先に許可したポート以外全て不許可にする
#デフォルトであったけどDROPに変えたいのでコメントアウト
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#LOGGING
-A INPUT -m limit --limit 1/s -j LOG --log-level debug --log-prefix 'INPUT-DROP:'
-A INPUT -j DROP
-A FORWARD -m limit --limit 1/s -j LOG --log-level debug --log-prefix 'FORWARD-DROP:'
-A FORWARD -j DROP

COMMIT
--------------------------------------------------------------------------------------
# /etc/init.d/iptables restart

・ログ出力設定
# vim /etc/rsyslog.conf
コメントされているkern.*の下あたりにでも追記
--------------------------------------------------------------------------------------
kern.debug /var/log/iptables.log
--------------------------------------------------------------------------------------
※iptables専用ではないけどkern.debugには他のログがこないからこれでいいらしい

・ファイル作成
# touch /var/log/iptables.log
# chmod 600 /var/log/iptables.log

・ローテート設定
# vim /etc/logrotate.d/syslog
{ の上あたりに追記
--------------------------------------------------------------------------------------
/var/log/iptables.log
--------------------------------------------------------------------------------------

参考:
http://www.rapidsite.jp/support/manual/rv_custom/e_4210.html
http://kazmax.zpp.jp/cmd/i/iptables.8.html
http://arisonsvr.org/web/maincontents/serverset/iptables/iptable.html
http://www3.big.or.jp/~sian/linux/tips/iptables.html
http://kensuke.jp/~kensuke/pukiwiki/index.php?debian%2Fns%2Fiptables
http://vok.paburica.com/index.php?iptables%2FSYN%20Flood%E5%AF%BE%E7%AD%96%E3%82%92%E3%81%97%E3%81%9F%E3%81%84


・作業ディレクトリ作る
# mkdir ~/tmp

・必要なパッケージを導入
基本的なもの
# yum install -y make gcc wget gettext-devel
rubyやredmineに必要っぽいもの
# yum install -y zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel ncurses-devel gdbm-devel readline-devel sqlite-devel
gitに必要っぽいもの
# yum install -y expat-devel perl-ExtUtils-MakeMaker.x86_64

・gitインストール
# cd ~/tmp
# wget --no-check-certificate https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz
# tar zxvf git-1.8.4.1.tar.gz
# cd git-1.8.4.1
# ./configure
# make && make install
# git version


■rubyインストール
ポイントはrootユーザだけでなくPassengerユーザ(apacheやredmineユーザ)が使うので
システム共有な場所にインストールする必要がある
また、Passengerは祖先に渡って全てのディレクトリに読込と実行権限が必要
よって/usr/local内にインストールする

・rbenv+ruby-buildのインストール
# echo 'export RBENV_ROOT="/usr/local/rbenv"' >> ~/.bashrc
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> ~/.bashrc
# source ~/.bashrc
# git clone https://github.com/sstephenson/rbenv.git ${RBENV_ROOT}
# mkdir ${RBENV_ROOT}/plugins
# git clone https://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build
# echo 'eval "$(rbenv init -)"' >> ~/.bashrc
# source ~/.bashrc
# rbenv --version
--------------------------------------------------------------------------------------
rbenv 0.4.0-67-g3300587
--------------------------------------------------------------------------------------
※この設定だと他ユーザがデフォルトでは使えないはずなので留意

・ruby2.0.0のインストール
使えるrubyバージョン確認
# rbenv install -l
rubyをインストール
# rbenv install 2.0.0-p247
パスを通す
# rbenv rehash
インストールしたバージョンを有効にする
# rbenv global 2.0.0-p247
# ruby -v
--------------------------------------------------------------------------------------
ruby 2.0.0p247
--------------------------------------------------------------------------------------

・rubygemsインストール
# rbenv exec gem install rubygems-update
# rbenv rehash
# update_rubygems
参考:
http://docs.rubygems.org/read/chapter/3#page83

・bundlerインストール
# rbenv exec gem install bundler --no-ri --no-rdoc
# rbenv rehash


■mysqlインストール
[SSH]
・サーバーインストール
# yum -y install mysql-server
# chkconfig mysqld on
# vim /etc/my.cnf
追記:
--------------------------------------------------------------------------------------
[mysqld]
character-set-server = utf8
[mysql]
default-character-set = utf8
--------------------------------------------------------------------------------------
# service mysqld restart

# mysqladmin -u root password DBパスワード
# /usr/bin/mysql_secure_installation
--------------------------------------------------------------------------------------
Change the root password? : n
Remove anonymous users? : Y
Disallow root login remotely? : Y
Remove test database and access to it? : n
Reload privilege tables now? : Y
--------------------------------------------------------------------------------------

・redmine用DB作成
# mysql -u root -p
--------------------------------------------------------------------------------------
> create database redmine character set utf8;
> create user 'redmine'@'localhost' identified by 'DBパスワード';
> grant all privileges on redmine.* to 'redmine'@'localhost';
> \q
--------------------------------------------------------------------------------------

■redmineインストール
ここもPassengerが全てのディレクトリに権限がある場所に入れる必要がある
今回は/var/www配下におく
# cd ~/tmp
# wget http://rubyforge.org/frs/download.php/77138/redmine-2.3.3.tar.gz
# tar zxvf redmine-2.3.3.tar.gz
# mv redmine-2.3.3 /var/www/redmine
# cd /var/www/redmine
# mkdir -p tmp tmp/pdf public/plugin_assets
# chmod -R 755 files log tmp public/plugin_assets
# cd /var/www/redmine/config
# cp -p database.yml.example database.yml
# vim database.yml
Change it to look like:
--------------------------------------------------------------------------------------
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "DBパスワード"
encoding: utf8
--------------------------------------------------------------------------------------

# cd /var/www/redmine

・Gemfileにpassengerを追加
# vim Gemfile
sourceの下に追記:
--------------------------------------------------------------------------------------
gem "passenger"
--------------------------------------------------------------------------------------

・gemをインストールする(ディレクトリ配下に)
# yum -y install gcc-c++ ImageMagick-devel libxml2-devel libxslt-devel
# bundle install --path vendor/bundle

・rails動作確認
# bundle exec rails -v
--------------------------------------------------------------------------------------
Rails 3.2.13
--------------------------------------------------------------------------------------

# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate
# RAILS_ENV=production bundle exec rake redmine:load_default_data
--------------------------------------------------------------------------------------
Select Language: ja
--------------------------------------------------------------------------------------

・動作確認(WEBrick)
# bundle exec rails server -e production
>> http://IPアドレス:3000/
Redmineの初期アカウントはadmin:admin

・設定ファイルを用意
# cd /var/www/rails/redmine/config
# cp -p configuration.yml.example configuration.yml

・実行モードをproduction固定
# vim /var/www/rails/redmine/config/boot.rb
末尾に追記:
--------------------------------------------------------------------------------------
ENV['RAILS_ENV'] ||= 'production'
--------------------------------------------------------------------------------------

・再確認
# cd /var/www/redmine
# bundle exec rails server
>> http://IPアドレス:3000/

参考:
http://www.redmine.org/projects/redmine/wiki/RedmineInstall
http://www.redmine.org/projects/redmine/wiki/Redmine_on_CentOS_installation_HOWTO
http://www.sdmemo.com/wiki/Redmine%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86


■apache+passengerセットアップ
passengerはroot権限では動作しない
実行ユーザはredmine/config.ru(場合によってはconfig/environment.rb)のオーナーとなる
今回はredmineユーザーで動作させる
# adduser redmine
# passwd redmine
ユーザパスワード
# chown -R redmine:redmine /var/www/redmine

・passengerモジュールのインストール
# bundle exec passenger-install-apache2-module
# bundle exec passenger-install-apache2-module --snippet
apacheの設定に使う文字列が表示されるのでコピーする:
--------------------------------------------------------------------------------------
LoadModule passenger_module /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so
PassengerRoot /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20
PassengerDefaultRuby /usr/local/rbenv/versions/2.0.0-p247/bin/ruby
--------------------------------------------------------------------------------------

・passenger設定ファイルを作成
# vim /etc/httpd/conf.d/passenger.conf
以下の内容で新規作成する
基本設定のところはsnippetで得られた文字列で置き換える:
--------------------------------------------------------------------------------------
# Passengerの基本設定
LoadModule passenger_module /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so
PassengerRoot /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20
PassengerDefaultRuby /usr/local/rbenv/versions/2.0.0-p247/bin/ruby

# Passengerが追加するHTTPヘッダを削除するための設定
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加
PassengerMaxPoolSize 6
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 0
PassengerMaxPreloaderIdleTime 0
--------------------------------------------------------------------------------------

・文法チェック
# apachectl configtest
--------------------------------------------------------------------------------------
Syntax OK
--------------------------------------------------------------------------------------

・とりあえずredmine関係なくapacheの動作確認
# /etc/init.d/httpd restart
>> http://IPアドレス/

参考:
http://morizyun.github.io/blog/passenger-install-apache-ruby-rails/

メモ:
祖先にわたってすべてのディレクトリにapacheユーザの読み込みと実行権限が必要
http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_to_a_virtual_host_8217_s_root
all parent folders. That is, /webapps/mycook and /webapps must also be readable and executable by Apache.
メモ:
passengerは仮想ホストかシンボリックリンクを使うべきで、
仮想ディレクトリだとうまく動かない模様

・redmineをSUB-URIで実行する(シンボリックリンクを用いる)
※但し今回の設定だとpassengerはSUB-URIで動作するがWEBrickはルートディレクトリで動作する
 どちらも同じSUB-URIにする方法はわからなかった
# ln -s /var/www/redmine/public /var/www/html/redmine
# vim /etc/httpd/conf/httpd.conf
DocumentRoot(/var/www/html)の下あたりに追記
--------------------------------------------------------------------------------------
#Redmine
RackBaseURI /redmine
<Directory /var/www/redmine/public>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
--------------------------------------------------------------------------------------

# cd /var/www/redmine
# vim config/boot.rb
末尾に追記
--------------------------------------------------------------------------------------
ENV['RAILS_RELATIVE_URL_ROOT'] = '/redmine'
--------------------------------------------------------------------------------------
WEBrickで実行する際はconfig.ruにmapを追記する必要あるが、それだとpassengerが誤動作する
この状態でWEBrickで実行するとSUB-URIではない状態で実行される

動作確認
# /etc/init.d/httpd restart
>> http://IPアドレス/redmine

・redmineセットアップ
[redmine]
adminでログイン パスワードadmin
個人設定からパスワードを変更する
管理->情報からすべてにチェックマークがついていることを確認する


[SSH]
■Mercurialインストール
# cd ~/tmp
Mercurial用ユーザを作成(今回は使わないけどMercurialをWEBで動作させる際には必要のはず)
# useradd -m mercurial
# passwd mercurial
ユーザパスワード

・Mercurialをeasy_install経由でインストール
# yum -y install python-devel make gcc
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
# easy_install -U mercurial
# hg --version

ユーザ情報を設定する
# vim ~/.hgrc
--------------------------------------------------------------------------------------
[ui]
username = admin <redmine@mail.com>
--------------------------------------------------------------------------------------

動作確認
# cd ~/tmp
# mkdir hgtest
# hg init hgtest

Redmine用リポジトリを作る
# cd /var/www
# mkdir hg
# cd hg
# mkdir project01
# hg init project01

・この状態でredmineのプロジェクト設定からリポジトリを連携する
例(リポジトリパス):/home/アカウント名/hg/project01
識別子: 任意
パスのエンコーディング: 空欄


■Mercurialクライアントをインストール
[ローカル]
・TortoiseHgをダウンロードしてインストール
http://mercurial.selenic.com/
・デスクトップ等で右クリック->TortoiseHg->Global Settings
・Commit->Usernameをセット
名前 <メールアドレス>
・Edit File
・[ui]にsshをセット(圧縮オプション等をセット)
--------------------------------------------------------------------------------------
ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe" -agent -ssh -2 -batch -C
--------------------------------------------------------------------------------------
・Save->OK

・TortoiseHgを公開暗号方式に対応させる
・puttygen(ASE対応)をダウンロードする
※ごった煮版等はASE対応してない
http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe
・実行してLoadからSSH Private Key ファイルを読み込み
・Save privete keyで●●●.ppkとして保存 -> c:\ssh_keys\ に保存したとする
・キー管理ツールのPageant.exeのショートカットを作成する
--------------------------------------------------------------------------------------
"C:\Program Files\TortoiseHg\Pageant.exe" "c:\ssh_keys\●●●.ppk"
--------------------------------------------------------------------------------------

動作確認
・ショートカットを実行する
・デスクトップ等で右クリック->TortoiseHg->Clone
source
--------------------------------------------------------------------------------------
ssh://root@IPアドレス//ssh://var/www/hg/project01
--------------------------------------------------------------------------------------
※必要に応じてユーザアカウントを作る方がよい


■SSL対応(自己証明)
[SSH]
# yum -y install openssl openssl-devel mod_ssl
# cd /etc/pki/tls/certs

・RSA秘密鍵生成
# openssl genrsa -des3 -out private.key 2048
--------------------------------------------------------------------------------------
Enter pass phrase for private.key: パスワード
--------------------------------------------------------------------------------------
・内容確認
# openssl rsa -in private.key -text -noout

・証明書要求(CSR)生成
# openssl req -new -key private.key -out server.csr
--------------------------------------------------------------------------------------
Enter pass phrase for private.key: パスワード
Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []: Tokyo
Locality Name (eg, city) [Default City]: Minato-ku
Organization Name (eg, company) [Default Company Ltd]: TEST Co., Ltd.
Organizational Unit Name (eg, section) []: TEST
Common Name (eg, your name or your server's hostname) []: IPアドレス
以降、省略(入力不要)
--------------------------------------------------------------------------------------
・内容確認
# openssl req -in server.csr -text -noout

・証明書発行
# openssl x509 -in server.csr -out server.crt -req -signkey private.key -days 365

・権限変更
# chmod 400 private.key server.crt server.csr
・RSA秘密鍵をしかるべき場所へ
# mv /etc/pki/tls/certs/private.key /etc/pki/tls/private/private.key

・apacheにセット
# vim /etc/httpd/conf.d/ssl.conf
コメント解除
--------------------------------------------------------------------------------------
DocumentRoot "/var/www/html"
--------------------------------------------------------------------------------------
変更する
--------------------------------------------------------------------------------------
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/private.key
--------------------------------------------------------------------------------------
</VirtualHost>の上あたりに追記する
--------------------------------------------------------------------------------------
# SSLでも画像やJavaScriptファイルがキャッシュされるように指定
Header onsuccess append Cache-Control publicExpiresActive On
ExpiresByType text/css "access plus 3 days"
ExpiresByType application/x-javascript "access plus 3 days"
ExpiresByType image/jpeg "access plus 3 days"
ExpiresByType image/png "access plus 3 days"
ExpiresByType image/gif "access plus 3 days"
--------------------------------------------------------------------------------------

# /etc/init.d/httpd restart
>> https://IPアドレス/redmine

・動作が確認できたらhttpを閉じる
# vim /etc/httpd/conf/httpd.conf
コメントアウト
--------------------------------------------------------------------------------------
#Listen 80
--------------------------------------------------------------------------------------

・今だとhttpd再起動毎にパスワード聞かれるので省略する
# vim /etc/httpd/conf.d/ssl.conf
変更
--------------------------------------------------------------------------------------
SSLPassPhraseDialog exec:/etc/httpd/certs/pass_phrase.sh
--------------------------------------------------------------------------------------

# mkdir /etc/httpd/certs
# vim /etc/httpd/certs/pass_phrase.sh
--------------------------------------------------------------------------------------
#!/bin/sh
echo "パスワード"
--------------------------------------------------------------------------------------

# chown root:root /etc/httpd/certs/pass_phrase.sh
# chmod 500 /etc/httpd/certs/pass_phrase.sh
・動作確認
# ./pass_phrase.sh
・動作確認
# /etc/init.d/httpd restart

・httpdをサービス化
# chkconfig httpd on

参考:
https://www.verisign.co.jp/ssl/help/csr/capache_new.html
http://d.hatena.ne.jp/mrgoofy33/20110209/1297262978
http://linux.kororo.jp/cont/server/openssl_command.php
http://centossrv.com/apache-ssl.shtml
http://takuya-1st.hatenablog.jp/entry/20110208/1297157015


おまけ
ruby1.8の場合、redmineのdatabase.ymlに記述する adapter: mysql2 は、mysqlになる。

ruby1.8の場合、redmineのGemfileに記述をしないとバージョンエラーになる。
# vim Gemfile
--------------------------------------------------------------------------------------
gem 'nokogiri', '~> 1.5.10' --------------------------------------------------------------------------------------

redmine2.3+ruby1.8の場合に、WEBrick実行時に変な警告が出る。
それを消す方法
# vim /var/www/redmine/lib/redmine/syntax_highlighting.rb
コメントアウト
--------------------------------------------------------------------------------------
#require 'coderay/helpers/file_type' --------------------------------------------------------------------------------------
参考:
http://www.redmine.org/issues/13692



さくらレンタルサーバーにRedmine2.3を入れる

さくらレンタルサーバーのスタンダードプラン(FreeBSD)にRedmine現在最新の2.3.3+ruby2.0.0を入れてみたので手順を公開します。
また、Mercurialもインストールしました。
ネットで調べるとこのRedmine2.3+ruby2.0.0構成で入れている記事は無く、古いRedmineだったり古いrubyだったり。
ただ、結論としては、入るけど遅くて使いものにならない、でした。
1画面遷移10秒とかになります。

原因はWEBサーバーが自由に使えないことにあり、
さくらレンタルサーバーではデフォルトでapacheが用意されていますが、
そこを経由するとRailsがアプリケーションとして動作できません。
で、汎用的なCGIモードというので動作させると遅い、という結果になります。
また、Railsをアプリケーションとして動作させる独自サーバープロセスを立ち上げることもできるのですが、
そうすると数分でシステムからKillされてしまいます。
どうもさくらレンタルでは常駐型のプロセスを許してなかったり、負荷や常駐時間の閾値を超えるとKillされたりがあるようです。
よって、Redmineを入れたければさくらレンタルで頑張るよりは、最初からさくらVPS他のサービスを契約したほうが良いです。

ポイント
・root権限ないのでパッケージインストール等は全てHOME上に行う
・WEBサーバーはサービス側で用意されているapacheを用いる
 apache側に設定が必要なアプリは使えない
・RedmineはCGIモード(?)で動作させる
・いくつかのパッケージのビルドにはgmakeを使う

では手順です。
※お古の環境のためもしかしたら他にもパッケージインストールが必要かもしれません
※思考錯誤したままなのでおかしな手順があるかもしれません

■シェルをbashに変更
FreeBSDはcshというシェルらしいけど、不慣れなのと世の情報は大抵bashのためbashに変更する。
$ cat /etc/shells
$ chsh -s /usr/local/bin/bash
$ cd
$ vi .bash_profile
--------------------------------------------------------------------------------
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
--------------------------------------------------------------------------------
$ vi .bashrc
--------------------------------------------------------------------------------
PATH=$HOME/local/bin:$PATH
export LANG=ja_JP.UTF-8
--------------------------------------------------------------------------------

この状態でいったんログオフ再ログイン
$ exit

参考:
http://blog.smileeeen.com/2010/06/sakura/bash/


■vimインストール
エディタとして今回はvimを入れる
$ cd ~/tmp
$ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
$ tar jxvf vim-7.4.tar.bz2
$ cd vim74
$ mkdir patches
$ cd ./patches
$ curl -O 'ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.[001-052]'
$ cd ..
$ cat patches/7.4.* | patch -p0
$ ./configure --enable-multibyte --enable-xim --enable-fontset --with-features=big --prefix=$HOME/local
$ make && make install
キー操作がなんかおかしいのに対応
$ cat << EOF >> .vimrc
--------------------------------------------------------------------------------
set nocompatible
EOF
--------------------------------------------------------------------------------


■gitインストール
$ cd ~/tmp
$ wget --no-check-certificate https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz
$ tar zxvf git-1.8.4.1.tar.gz
$ cd git-1.8.4.1.tar.gz
$ ./configure --prefix=$HOME --enable-pthreads=-pthread --with-curl=/usr/local
$ gmake && gmake install
$ git version
※makeじゃだめらしい
※もしgitがコマンドエラーになった場合はログインしなおせばいける
参考:
http://www.machu.jp/diary/20130622.html#p01


■rbenv+ruby-buildインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ rbenv --version
--------------------------------------------------------------------------------
rbenv 0.4.0-67-g3300587
--------------------------------------------------------------------------------

■ruby2インストール
$ echo 'export TMPDIR="$HOME/tmp"' >> ~/.bashrc
※/var/tmp が noexec に設定されているための処置

$ source ~/.bashrc
一時的にmakeをgmakeとする
$ export MAKE="gmake"

使えるrubyバージョン確認
$ rbenv install -l

rubyをインストール
$ CONFIGURE_OPTS="--with-openssl-dir=/usr/local --with-readline-dir=/usr/local --with-iconv-dir=/usr/local" rbenv install 2.0.0-p247
パスを通す
$ rbenv rehash
インストールしたバージョンを有効にする
$ rbenv global 2.0.0-p247
$ ruby -v
--------------------------------------------------------------------------------
ruby 2.0.0p247
--------------------------------------------------------------------------------

MAKEを戻すためにログオフ再ログイン
$ exit

rubygemsをアップデート
$ rbenv exec gem install rubygems-update
$ rbenv rehash
$ update_rubygems

bundlerインストール
$ rbenv exec gem install bundler --no-ri --no-rdoc
$ rbenv rehash


■mysqlセットアップ
[コントロールパネルで操作]
--------------------------------------------------------------------------------
[mysqld]
character-set-server = utf8
[mysql]
default-character-set = utf8
--------------------------------------------------------------------------------
相当の設定をする
※おそらくデフォルト値なので何もしない

--------------------------------------------------------------------------------
> create database redmine character set utf8;
--------------------------------------------------------------------------------
相当の設定をする
実際は アカウント名_DB名 になる

ユーザーや権限設定は不要(アカウント名固定)



■redmineのインストール

$ cd
$ mkdir rails
$ cd rails
$ wget http://rubyforge.org/frs/download.php/77138/redmine-2.3.3.tar.gz
$ tar zxvf redmine-2.3.3.tar.gz
$ mv redmine-2.3.3 redmine
$ cd redmine
$ mkdir -p tmp tmp/pdf public/plugin_assets
$ chmod -R 757 files log tmp public/plugin_assets
$ cd ~/rails/redmine/config
$ cp database.yml.example database.yml
$ vim database.yml
Change it to look like:
--------------------------------------------------------------------------------
production:
adapter: mysql2
database: DBユーザー名_redmine(さくらレンタルだとコントロールパネルから調べる)
host: DBサーバー名(さくらレンタルだとコントロールパネルから調べる)
username: DBユーザー名(さくらレンタルだとコントロールパネルから調べる)
password: "DBパスワード"(さくらレンタルだとコントロールパネルからセットする)
encoding: utf8
--------------------------------------------------------------------------------

$ cd ~/rails/redmine
gemをディレクトリ配下にインストールする
$ bundle install --path vendor/bundle
※Gemfileは最初からある
※make=gmakeを残しているとここでffiがエラーとなるで注意

動作確認
$ bundle exec rails -v

$ bundle exec rake generate_secret_token
$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake redmine:load_default_data
--------------------------------------------------------------------------------
Select Language: ja
--------------------------------------------------------------------------------

動作確認(WEBrick)
$ bundle exec rails server -e production
http://ドメイン:3000/

設定ファイルを用意
$ cd ~/rails/redmine/config
$ cp -p configuration.yml.example configuration.yml

htaccessファイルを用意(WEBrickでは使われない)
$ cd ~/rails/redmine/public
$ cp -p htaccess.fcgi.example .htaccess
--------------------------------------------------------------------------------
<IfModule mod_fastcgi.c>関連 コメントアウト
<IfModule mod_fcgid.c>関連 コメントアウト
Options +FollowSymLinks +ExecCGI コメントアウト
<IfModule mod_fastcgi.c>関連 コメントアウト
<IfModule mod_fcgid.c>関連 コメントアウト
--------------------------------------------------------------------------------

実行モードをproduction固定
$ vim ~/rails/redmine/config/boot.rb
末尾に追記
--------------------------------------------------------------------------------
ENV['RAILS_ENV'] ||= 'production'
--------------------------------------------------------------------------------

再確認
$ bundle exec rails server
http://ドメイン:3000/

参考:
http://www.redmine.org/projects/redmine/wiki/RedmineInstall
http://www.machu.jp/diary/20130622.html#p01
http://t100life.blog121.fc2.com/blog-entry-148.html
http://manablog.eek.jp/linux/install_redmine_to_sakura/
http://tmpz84.blogspot.jp/2011/07/rails-3.html



■redmineをさくらレンタルのapacheで動作させる
要点
・さくらレンタルでは常駐型プロセスを認めておらずKillされる可能性が高い
 そこで共有サーバーのapache上でCGIモードで動作させる
 その場合、config.ruが実行されないため、それに相当するdispatch.cgiというのを作ってやる
 さくらではデフォルトでONになってるらしく、指定するとエラーとなるのでしない
・DocumentRoot=/redmine/publicは権限不足で無理そうなのでSUB-URI(http:/ドメイン/redmine)で動作させる
 publicディレクトリを~/www/redmineとしてシンボリックリンクを張る
 この際、SUB-URIは本来はapache設定ファイルで指定するができないため無理繰り対応させる
・apacheユーザは環境変数が異なるため指定してやる必要があるらしい
$ cd ~/rails/redmine
$ ln -s $HOME/rails/redmine/public $HOME/www/redmine

環境変数等をセット
$ vim config/boot.rb
末尾に追記
--------------------------------------------------------------------------------
#ruby lib 関連
$LOAD_PATH.push('/home/アカウント名/.rbenv/versions/2.0.0-p247/lib/ruby/site_ruby/2.0.0')
$LOAD_PATH.push('/home/アカウント名/.rbenv/versions/2.0.0-p247/lib/ruby')

#PATHにさくらアカウントのbinを追加
ENV['PATH'] += ':/home/アカウント名/bin'
ENV['PATH'] += ':/home/アカウント名/local/bin'

#Mercurial用にPython変数指定
ENV['PYTHONPATH'] ||= '/home/アカウント名/lib/python'

#GEM_HOME指定
ENV['GEM_HOME'] ||= '/home/アカウント名/rails/redmine/vendor/bundle/ruby/2.0.0'

#RAILSをSUB-URIに対応
ENV['RAILS_RELATIVE_URL_ROOT'] = '/redmine'
--------------------------------------------------------------------------------

WEBrick用にSUB-URIをセット
$ vim config.ru
runをmapで囲む
--------------------------------------------------------------------------------
map ActionController::Base.config.relative_url_root || "/" do
run RedmineApp::Application
end
--------------------------------------------------------------------------------

確認(画面遷移も確認すること)
$ bundle exec rails server
http://ドメイン名:3000/redmine

htaccessファイルにconfig.ru相当のcgiを呼び出す処理を追記
$ cp -p public/htaccess.fcgi.example public/.htaccess
$ vim public/.htaccess
最初の方に追記
--------------------------------------------------------------------------------
AddHandler cgi-script .cgi
--------------------------------------------------------------------------------

ほかのRewriteRuleが記載されてるあたりに追記
--------------------------------------------------------------------------------
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
--------------------------------------------------------------------------------

fastcgi用dispatch.fcgiを参考にconfig.ru相当のCGIを作る
$ cp -p public/dispatch.fcgi.example public/dispatch.cgi
rubyのパスを変更
--------------------------------------------------------------------------------
#!/home/アカウント名/.rbenv/versions/2.0.0-p247/bin/ruby
--------------------------------------------------------------------------------

call(env)の@app.call(env)直前に以下を追記
SUB-URI(/redmine)を使うとき、本来ならApach設定ファイルのVirtualHostディレクティブの中に
RackBaseURI指定をするらしいがさくらではそれができない
このままだとアプリ内で生成されるURIにSUB-URIがつかないのでSCRIPT_NAMEに入れることで対応
--------------------------------------------------------------------------------
#PATH_INFOからSUB-URIを除去
env['PATH_INFO'] = env['PATH_INFO'].gsub(/\A#{ENV['RAILS_RELATIVE_URL_ROOT']}(.*)\Z/, '\1')
env['SCRIPT_NAME'] = ENV['RAILS_RELATIVE_URL_ROOT']
--------------------------------------------------------------------------------
※試行錯誤してたらたまたまうまくいった方法で、もしかしたら他に不具合出るかも

apacheで確認(画面遷移も確認すること)
http://ドメイン名/redmine

メモ:
rails2.2以前と2.3以降とでRack対応かどうかが異なり、設定が変わる
ネット上にある情報は2.2以前のものが多い

参考:
http://quickhack.net/nom/blog/2012-09-19-rails-with-relative-url-root.html
http://manablog.eek.jp/linux/install_redmine_to_sakura/
http://nyon2.net/archives/ruby-on-rails/
http://zaya3.blog.fc2.com/blog-entry-50.html
http://ascarpediemstyle.com/?p=409
http://takuya-1st.hatenablog.jp/entry/20120108/1326043011
http://t100life.blog121.fc2.com/blog-entry-148.html
http://d.hatena.ne.jp/cimadai/20080923/RubyonRails_on_sakura
http://manablog.eek.jp/linux/install_redmine_to_sakura/



■Mercurialインストール
インストール先を$HOME/localにするとSSH経由コマンドで見つからないぽい
HOME直下に入れること
$ cd ~/tmp
$ wget http://www.selenic.com/mercurial/release/mercurial-2.7.2.tar.gz
$ tar zxvf mercurial-2.7.2.tar.gz
$ cd mercurial-2.7.2
$ python setup.py install --home=$HOME
$ echo 'export PYTHONPATH="$HOME/lib/python"' >> ~/.bashrc
$ source ~/.bashrc
$ hg --version

ユーザー情報登録
$ vim ~/.hgrc
--------------------------------------------------------------------------------
[ui]
username = admin <redmine@mail.com>
--------------------------------------------------------------------------------

試す
$ cd ~/tmp
$ mkdir hgtest
$ hg init hgtest

redmine用にリポジトリ作る
$ cd
$ mkdir hg
$ cd hg
$ mkdir project01
$ hg init project01

この状態でredmineのプロジェクト設定からリポジトリを連携する
例(リポジトリパス):/home/アカウント名/hg/project01

■Mercurialクライアントインストール
HTTP経由にもできるけど今回はSSH経由で
[ローカル操作]
・TortoiseHgをダウンロードしてインストール
http://mercurial.selenic.com/
・デスクトップ等で右クリック->TortoiseHg->Global Settings
・Commit->Usernameをセット
名前 <メールアドレス>
・Edit File
・[ui]にsshをセット(圧縮オプション等をセット)
--------------------------------------------------------------------------------
ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe" -agent -ssh -2 -batch -C
--------------------------------------------------------------------------------
・Save->OK
・この状態でクローンを試す
・デスクトップ等で右クリック->TortoiseHg->Clone
source
--------------------------------------------------------------------------------
ssh://アカウント名@アカウント名.sakura.ne.jp//home/アカウント名/hg/project01
--------------------------------------------------------------------------------

これでローカルからサーバーに接続可能になる
但しこの状態だと何かする度にパスワードを尋ねられて使い辛いので
以降の操作でSSH認証を公開鍵方式にする


■SSHを公開暗号鍵方式にする
$ ssh-keygen -t dsa
--------------------------------------------------------------------------------
Enter file in which to save the key (/home/アカウント名/.ssh/id_dsa): ※そのままEnter
Enter passphrase (empty for no passphrase): ※パスワード入力
--------------------------------------------------------------------------------
$ cd ~/.ssh
$ mv id_dsa.pub authorized_keys
$ chmod 600 authorized_keys

この手順で元の認証方式と公開鍵方式両方でログインできるようになる


■TortoiseHgを公開暗号方式に対応させる
公開鍵をローカルにもってきてTortoiseHg付属のPageantに登録する
そうすることでクローン等の際に鍵を使ってログインするようになる
但し、毎回改めて鍵を指定してやる必要がある
いくつか方法があるが今回は、ショートカットの引数で渡すようにする
公開鍵は形式変換する必要があり、puttygenで変換する

[SSH]
$ cd ~/.ssh
$ more id_dsa
内容をクリップボードにコピー

[ローカル操作]
・クリップボードの中身をテキストファイルに張り付けて保存
・puttygen(ASE対応版)をダウンロードする
http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe
・実行してLoadから先ほどのテキストファイルを読み込み
・Save privete keyで"○○○.ppk"として保存 -> c:\ssh_keys\に保存
・キー管理ツールのPageant.exeのショートカットを作成する
--------------------------------------------------------------------------------
"C:\Program Files\TortoiseHg\Pageant.exe" "c:\ssh_keys\○○○.ppk"
--------------------------------------------------------------------------------
※今後鍵が増えても都度ショートカット実行すれば、Pageant実行中でもキーが有効になる

クローンを試す
・Pageantショートカットを実行しパスワードを入力する
・その状態で先ほどと同じようにクローンする

参考:
http://d.hatena.ne.jp/NAT_programming/20080504/1209901660
http://0xc000013a.blog96.fc2.com/blog-entry-65.html
http://sh1.2-d.jp/b/2007-10-18-00-05.html
http://www.dodgson.org/omo/t/?date=20070519
http://www.emptypage.jp/notes/pymods-on-sakura.html#ID000301
http://umezo.hatenablog.jp/entry/20080320/1206015911



■SSL対応
[コントロールパネル操作] ・さくらレンタルのドメイン設定から共有SSLをONにする
https://ドメイン名/redmine



以下、没ネタのメモ。

■本来redmine(rails3.2)でSSL接続させるらしい設定
なんかうまくいかなかった
$ vim ~/rails/redmine/config/application.rb
次の場所にconfig.force_sslをセットする
--------------------------------------------------------------------------------
module RedmineApp
class Application < Rails::Application
config.force_ssl = true



--------------------------------------------------------------------------------


■fastcgiインストール
CGIモードながら、キャッシュを駆使して速くするらしい方法
着手し始めたものの、どうもapacheの設定や再起動が必要っぽい気がしたので途中で断念。
一応、これでいいかな?と思える手順を残す。
$ cd ~/tmp
$ wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
$ tar xzvf fcgi-2.4.0.tar.gz
$ cd fcgi-2.4.0
$ ./configure --prefix=$HOME/local CFLAGS="-g -O2 -Wall -fPIC" CXXFLAGS="-g -O2 -Wall -fPIC"
$ make && make install
$ cgi-fcgi
※configureにいろいろオプションつけないとgem installでこける

$ cd ~/rails/redmine
$ bundle exec gem install fcgi -- --with-fcgi-include=$HOME/local/include --with-fcgi-lib=$HOME/local/lib
※bundle install/updateにオプション付ける機能がないので先に入れる
$ vim Gemfile
適当な場所、sourceの下あたりに追記
--------------------------------------------------------------------------------
gem "fcgi"
--------------------------------------------------------------------------------
$ bundle update

$ vim public/.htaccess
コメントアウト
--------------------------------------------------------------------------------
#Options +FollowSymLinks +ExecCGI
--------------------------------------------------------------------------------

$ cp -p public/dispatch.fcgi.example public/dispatch.fcgi
中身は元の手順と基本同じとする
以下、元の手順との差分
$ vim public dispatch.fcgi
requireの下に追記
--------------------------------------------------------------------------------
require 'rubygems'
require 'fcgi'
--------------------------------------------------------------------------------



2013-07-24

TCHAR型

完全にメモ

http://paken.s1.hayasoft.com/sb/log/eid13.html

TCHAR型のススメ
2007年01月31日 水曜日 | Paken > Iketaki |
C/C++でWindowsプログラミングをやり始めたとき、誰もが一度は嫌になるあの謎のデータ型。
"LPCTSTR"なんてのはその典型例です。
しかし、これが何かを知らぬまま放っておいてる、ということが意外とありがちなんですよね。
というわけで、一応簡単に解説しておくことにしよう、と思ったまでです。
※ C/C++を使った一般的なWindowsプログラミングをする方向けです。
※ 開発環境は、Microsoft Visual C++ 2005 を想定しています。

1.UNICODE
文字コードとはつまり、数値と文字の関係を示したものです。
文字'a'は128で表し、文字'b'は129で表し・・・と文字と数値が一対一で対応して定められています。(数値は適当です)
UNICODEも、その文字コードの一種で、古い文字コードのASCIIに比べて新しいものです。
NT系のWindowsには全て対応しているので、現在のほとんどの環境がUNICODE対応となっています。
だったら、プログラムもUNICODEに対応させた方が良いですね。

2.TCHAR型
C#という新しい言語のchar型はUNICODEですが、C/C++言語では、char型はASCII、古い文字コードです。
C/C++言語でUnicodeの文字を表すにはwchar_t型を使い、VC++ならWCHAR型とtypedefされています。
というわけで、UNICODE対応プログラムを作るにはWCHAR型を使えばOKです。

・・・OKなのですが、実はもっと良い型があります。
TCHAR型です。
こいつは何かというと、ASCIIとUNICODE両方に切り替えることが出来る万能型です。
コンパイラの設定で、UNICODEを使用する設定にすれば、UNICODEを使用し、そうでなければWindows9x系でも動作するASCIIを使用することになります。
非常に簡単に両方に対応しているプログラムが生成できるので、プログラムを作成する際にはTCHAR型をお勧めします。

3.文字または文字列の表し方
TCHAR chara;
chara = 'a';

上のコードは間違いです。なぜでしょうか。
char型で在れば問題ないのですが、ここではTCHAR型を宣言しているため、'a'がchar型だと認識されてしまうのです。
そのため、TCHAR型の文字を表すには、_TマクロまたはTEXTマクロを使用します。

TCHAR chara;
chara = _T('a');
// あるいは
chara = TEXT('a');

文字列の場合でも同じく、_T("PAKEN")、TEXT("PAKEN")、と記述してください。
(ちなみに、WCHAR型の場合は頭にLをつけ、L'a'、L"PAKEN"、などと表します)

4.謎のデータ型LPCTSTR
さて、char、WCHAR、TCHARの違いがわかったところで、一気に文字列を表すデータ型を見てみましょう。

LPSTR = char*
LPCSTR = const char*
LPWSTR = WCHAR*
LPCWSTR = const WCHAR*
LPTSTR = TCHAR*
LPCTSTR = const TCHAR*

お分かりですね。
LPCTSTRはTCHAR型の文字列なわけです。
今までchar型の文字列をLPCTSTRに強引にキャストして使っていた人もいたのではないでしょうか?
コンパイラの設定でUNICODEを使用しないようにすれば、TCHAR型はchar型に変換されるので、使うことが出来ます。
しかし、UNICODEを使用する設定にしていた人は、TCHAR型がWCHAR型に変換されるため、エラーが発生するはずです。

このような間違いを防ぐためにも、最初からchar型ではなくTCHAR型を使うことが推奨されているのです。

5.注意点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd);

見慣れたWinMain関数ですね。ですが、ここには問題点が一つあります。
お分かりですね。第3引数にchar型の文字列であるLPSTRが使われています。
ちゃんとTCHAR型のLPTSTRにしてあげなくてはなりません。
そのためには、WinMainの頭に_tをつけてあげます。なお、tchar.hをインクルードします

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nShowCmd);

これで問題ないですね。

ほとんど全てのWin32APIは、LPCTSTRまたはLPTSTRを使用しているので、私たちは気にする必要がありません。
ですが、このままだとstrcpyやfopenなど、C言語標準ライブラリ関数が使えなくなります。
でもご安心を。ちゃんとtchar.hにTCHAR型用に定義されています。

(tchar.hに定義されている例)
strcpy() → _tcscpy()
fopen() → _tfopen()
atoi() → _ttoi()
sprintf() → _stprintf()

何を使用すればよいのかわからなくなったら、tchar.h内を検索してみましょう。
TCHAR型を使用した代わりの関数が見つかります。

6.おわりに
実際やることは大したことないですがやたらと長くなってしまいました・・・
ほとんどの人は知っていることだとは思いますが、これは非常に重要なことです。
この記事を読んで初めて知った人は、出来るだけTCHAR型を使用して書くようにしましょう。

今の時代、C/C++を使用してWindowsプログラミングをする人すらあまりいませんからね。
デフォルトUNICODE対応のC#でなんら問題はないのです。