このブログを検索

ラベル it の投稿を表示しています。 すべての投稿を表示
ラベル it の投稿を表示しています。 すべての投稿を表示

2015-05-14

Visual Studio コマンドラインビルドのメモ

rebuild

@echo off

set DEVENV="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"
set SOLNAME=xxxx
echo rebuild.bat run
rmdir /S /Q ..\build
pause
mkdir ..\build
type nul > ..\build\dummy
pause
%DEVENV% ..\source\%SOLNAME% /build release
copy ..\source\bin\Release\* ..\build\.
del ..\build\*.xml
pause



release

@echo off
echo release.bat run
rmdir /S /Q ..\release
mkdir ..\release
mkdir ..\release\tmp
copy ..\build\* ..\release\tmp\.
copy ..\*.txt ..\release\tmp\.
del ..\release\tmp\dummy
zip.exe ..\release\xxxx.zip ..\release\tmp\* -j
pause



関係ないけどバッチファイルのサンプル
set past=3
set tempfile=quebak.tmp
set logname=quebak.log
cd > %tempfile%
set /p curdir=< %tempfile%
set temp=%curdir:~3,1%
if defined temp set curdir=%curdir%\
set tempfile=%curdir%%tempfile%
set logfile=%curdir%%logname%
set today=%date:~0,4%%date:~5,2%%date:~8,2%
echo WScript.Echo DateAdd("d",-%past%,"%date% %time:~0,8%")> dateadd.vbs
for /f "delims=" %%X in ('cscript //nologo dateadd.vbs') do set pastday=%%X
set pastday=%pastday:~0,4%%pastday:~5,2%%pastday:~8,2%
set dirdate=query_%today%
echo.>> "%logfile%"
echo -------------------------------->> "%logfile%"
echo %date% %time%>> "%logfile%"
%dirbak:~0,2%
cd %dirbak%

2014-10-29

samba4.0.6→4.1.11をインストール

結論から書きますと、4.0.6→4.1.11へのアップグレードは失敗で、
結局1から入れなおしました。
結構試行錯誤しましたが英語圏の情報含めて色々試してダメでした。

で、実施してからだいぶ経ってからのメモ書き復元のため、矛盾があったりするかもしれない超メモ書きです。

まず、Ubuntuをアップグレードしました。?(忘れた)→14.04.1
次にsamba4がどうなっているか確認

$ sudo chkconfig --list samba4
sudo: chkconfig: command not found
chkconfigが動かなくなっていたので代替アプリをインストール

$ sudo aptitude install sysv-rc-conf
WARNING: untrusted versions of the following packages will be installed!

Do you want to ignore this warning and proceed anyway?

IPV6無効
$ sudo vim /etc/sysctl.conf
追加
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

DNSサーバー指定を元に戻す
$ sudo vim /etc/resolvconf/resolv.conf.d/base
nameserver XXX.XXX.XXX.XXX # gatewayを指定

反映
$ sudo resolvconf -u
 前回同様不都合なサービスを外す
$ sudo update-rc.d -f slapd remove
$ sudo shutdown -r 0
$ ping www.google.com
$ cd
$ wget http://ftp.samba.org/pub/samba/samba-4.1.11.tar.gz
$ tar -zxvf samba-4.1.11.tar.gz
$ cd samba-4.1.11
$ ./configure
$ sudo /etc/init.d/samba4 stop
$ cd /usr/local; sudo tar cvfz samba-4.0.6.tar.gz ./samba
$ cd
$ cd samba-4.1.11
$ sudo make && sudo make install

とりあえず手動で動作確認
$ sudo /usr/local/samba/sbin/samba
$ ps aux |grep samba

ちなみにmakeを飛ばすと
bin/asn1_compileに関するエラーが出る

DNSサーバー指定をAD用に戻す
$ sudo vim /etc/resolvconf/resolv.conf.d/base
********
$ sudo resolvconf -u
$ sudo shutdown -r 0
$ tail -n 100 /var/log/syslog
Sep  6 14:31:52 xxxx samba[1408]: [2014/09/06 14:31:52.772588,  0] ../lib/util/util.c:161(file_check_permissions)
Sep  6 14:31:52 xxxx samba[1408]:   invalid permissions on file '/usr/local/samba/private/tls/key.pem': has 0644 should be 0600
Sep  6 14:31:52 xxxx samba[1408]: [2014/09/06 14:31:52.773858,  0] ../source4/lib/tls/tls_tstream.c:1125(tstream_tls_params_server)
Sep  6 14:31:52 xxxx samba[1408]:   Invalid permissions on TLS private key file '/usr/local/samba/private/tls/key.pem':
Sep  6 14:31:52 xxxx samba[1408]:   owner uid 0 should be 0, mode 0644 should be 0600
Sep  6 14:31:52 xxxx samba[1408]:   This is known as CVE-2013-4476.
Sep  6 14:31:52 xxxx samba[1408]:   Removing all tls .pem files will cause an auto-regeneration with the correct permissions.
Sep  6 14:31:52 xxxx samba[1408]: [2014/09/06 14:31:52.776128,  0] ../source4/ldap_server/ldap_server.c:940(ldapsrv_task_init)
Sep  6 14:31:52 xxxx samba[1408]:   ldapsrv failed tstream_tls_params_server - NT_STATUS_CANT_ACCESS_DOMAIN_INFO
Sep  6 14:31:52 xxxx samba[1408]: [2014/09/06 14:31:52.777057,  0] ../source4/smbd/service_task.c:35(task_server_terminate)
Sep  6 14:31:52 xxxx samba[1408]:   task_server_terminate: [Failed to startup ldap server task]
Sep  6 14:31:52 xxxx samba[1372]: [2014/09/06 14:31:52.808193,  0] ../lib/util/become_daemon.c:136(daemon_ready)
Sep  6 14:31:52 xxxx samba[1372]:   STATUS=daemon 'samba' finished starting up and ready to serve connectionssamba_terminate: Failed to startup ldap server task


$ sudo rm /usr/local/samba/private/tls/*.pem
$ sudo /etc/init.d/samba4 start
$ ps aux |grep samba


4.0.X系からのUpdateならDBの修復が必要らしい
$ sudo /etc/init.d/samba4 stop
# sudo /usr/local/samba/bin/samba-tool dbcheck --cross-ncs --reset-well-known-acls --fix
# sudo /usr/local/samba/bin/samba-tool ntacl sysvolreset
# sudo /usr/local/samba/bin/samba-tool dbcheck --cross-ncs --fix
ref: https://wiki.samba.org/index.php/Updating_Samba

$ sudo /etc/init.d/samba4 start
$ ps aux |grep samba
立ち上がらなくなった
どうもファイルのOwnerがおかしい気がするので全変更

$ sudo chown root:root /usr/local/samba -R
$ sudo /etc/init.d/samba4 start
$ ps aux |grep samba
立ち上がった


$ /usr/local/samba/bin/smbclient -L localhost -U%
OS=と Server=が空だけどとりあえず動いている?

$ /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[MYDOMAIN] OS=[] Server=[]

以前は空ではなかったので何かおかしい
一度設定ファイルがない状態でsamba4をインストールし、
smb.confの初期値で試したところちゃんと出た。

smb.confの初期値と移行したものを見比べると
globalが全然違うっぽい。

そこで、初期値の状態のものをひっぱってきて、
必要な設定を改めて施した。

初期値+provisionしたもの

# Global parameters
[global]
        workgroup = MYDOMAIN
        realm = MYDOMAIN.LOCAL
        netbios name = HOSTNAME
        server role = active directory domain controller
        dns forwarder = 192.168.1.1

[netlogon]
        path = /usr/local/samba/var/locks/sysvol/mydomain.local/scripts
        read only = No

[sysvol]
        path = /usr/local/samba/var/locks/sysvol
        read only = No


$ /usr/local/samba/bin/smbclient -L localhost -U%
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba 4.1.11]

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk    
        sysvol          Disk    
        IPC$            IPC       IPC Service (Samba 4.1.11)
・・・略・・・
結果が実行毎に変わるけどなんだろう・・・

その後いろいろ確認したけどどうもおかしく、直せない。
この状態でファイルサーバー越しにファイルを作成したりするとOwnerが3000000になる。
アンインストールしてからの再インストールをすることにした。

DNS設定を再び暫定に
$ sudo vim /etc/resolvconf/resolv.conf.d/base
nameserver ルーターIP
のみに変更

$ sudo resolvconf -u
samba関係をアンインストール
$ sudo aptitude remove smbd
$ sudo aptitude remove samba
$ sudo aptitude remove winbind libnss-winbind
$ sudo aptitude remove slapd ldap-utils


https://wiki.samba.org/index.php/Samba_4/OS_Requirements
$ sudo aptitude install build-essential libacl1-dev libattr1-dev \
   libblkid-dev libgnutls-dev libreadline-dev python-dev libpam0g-dev \
   python-dnspython gdb pkg-config libpopt-dev libldap2-dev \
   dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev acl
$ sudo aptitude install slapd ldap-utils
$ sudo /etc/init.d/slapd stop
$ sudo update-rc.d -f slapd remove
$ cd
$ wget http://ftp.samba.org/pub/samba/samba-4.1.11.tar.gz
$ tar -zxvf samba-4.1.11.tar.gz
$ cd samba-4.1.11
$ ./configure
$ sudo make && sudo make install
$ sudo aptitude install smbd
$ sudo aptitude install winbind libnss-winbind
$ sudo vim /etc/init/smbd.conf
start on ・・・ という行を#でコメントアウト

$ sudo vim /etc/resolvconf/resolv.conf.d/base
元に戻す

$ sudo shutdown -r 0

$ sudo /usr/local/samba/bin/samba-tool domain provision
$ sudo /etc/init.d/samba restart
$ ps aux|grep samba

とりあえず動作確認
$ ps aux |grep samba


$ /usr/local/samba/bin/smbclient -L localhost -U%
4.0.Xから上書きした際は結果が不定だったが
いろいろアンインストール→いろいろUpgrade
してからのsambaクリーンインストールで安定した

$ sudo host -t SRV _ldap._tcp.mydomain.local 127.0.0.1

$ kinit administrator@MYDOMAIN.LOCAL
以前と異なりパスワードを求められた

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@MYDOMAIN.LOCAL


$ sudo /usr/local/samba/bin/samba-tool user setexpiry Administrator --noexpiry
$ /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%'パスワード' -c 'ls'
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba 4.1.11]
  .                                   D        0  Sun Sep  7 19:21:26 2014
  ..                                  D        0  Sun Sep  7 19:22:00 2014

                37289 blocks of size 524288. 29480 blocks available





ref: https://wiki.samba.org/index.php/Setup_a_Samba_AD_Member_Server

以前のファイルを除去
$ sudo mv /lib/x86_64-linux-gnu/libnss_winbind.so /var/tmp/.
$ sudo mv /lib/x86_64-linux-gnu/libnss_winbind.so.2 /var/tmp/.
今回ビルドしたものを入れる
$ sudo ln -s /usr/local/samba/lib/libnss_winbind.so.2 /lib/x86_64-linux-gnu/libnss_winbind.so
$ sudo ln -s /lib/x86_64-linux-gnu/libnss_winbind.so /lib/x86_64-linux-gnu/libnss_winbind.so.2
$ sudo ldconfig
$ /usr/local/samba/bin/wbinfo -p
Ping to winbindd succeeded

$ getent passwd
MYDOMAIN\Administrator:*:0:100::/home/MYDOMAIN/Administrator:/bin/bash


ドメインレベルを上げる
$ sudo /usr/local/samba/bin/samba-tool domain level raise --domain-level=2008_R2
$ sudo /usr/local/samba/bin/samba-tool domain level show
$ sudo /usr/local/samba/bin/samba-tool domain level raise --forest-level=2008_R2
$ sudo /usr/local/samba/bin/samba-tool domain level show
移動プロファイル設定
$ mkdir -p /home/MYDOMAIN/profiles
$ chmod 1777 /home/MYDOMAIN/profiles
$ sudo vim /usr/local/samba/etc/smb.conf
[global]
   ‥‥
   logon path = //%L/profiles/%U
   ‥‥
[profiles]
   path = /var/samba/profiles
   browseble = no
   read only = no
   profile acls = yes
   create mask = 0600
   directory mask = 0700

$ sudo /etc/init.d/samba4 restart

Winをドメイン参加させてAdministratorでログオン

リモートサーバー管理ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=39296

[コントロールパネル] → [プログラム] → [Windowsの機能の有効化または無効化]
リモートサーバー管理ツールにチェックしてOK

コントロール パネル
システムとセキュリティ
管理ツール
Active Directory ユーザーとコンピュータ

Usersにいる対象アカウントのプロパティを開く
プロファイルのプロファイルのパスに
\\サーバー名\profiles\%USERNAME%
を入力して適用
※もしかしたらDomain Adminsにいれているとだめかも。

2014-01-28

ntpサーバーインストール

sambaインストール時に面倒でntpサーバーを入れていなかったが
よく考えたらADにntpサーバーは必須であった
(時間があまりに離れているととおそらくログインできない)

Windowsと共存させるためにUTCをOFFにする
$ sudo vim /etc/default/rcS

--- 変更 ---
UTC=no
------------

とりあえず時間を合わせる
$ sudo ntpdate ntp.nict.jp

ハードウェアに書き込む
$ sudo hwclock -w

ntpサーバーをインストールする
$ sudo aptitude install ntp

上位ntpサーバーを指定する
$ sudo vim /etc/ntp.conf

以下をコメントアウトする
--- コメントアウト ---
# server 0.ubuntu.pool.ntp.org
# server 1.ubuntu.pool.ntp.org
# server 2.ubuntu.pool.ntp.org
# server 3.ubuntu.pool.ntp.org
# server ntp.ubuntu.com
-----------------------

代わりに次の4行かく(適当)
--- 変更 ---
server ntp.nict.jp
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
------------

サービス再起動
$ sudo /etc/init.d/ntp restart

動作確認
$ ntpq -p

samba機をupdateしたらActiveDirectoryが止まった

ActiveDirectoryにしているsamba機をupgradeしたら、ADに参加しているマシンが何故かインターネットに繋がらず。
調べてみたところ、参加マシン→sambaサーバーのホスト名が解決できない。IPでなら繋がり、LANは生きている。
というわけでsambaサーバーのsyslogを確認してみると、どうもsambaサーバーの起動にこけている。

Jan 28 06:49:51 xxxx samba[1213]: [2014/01/28 06:49:51.626210,  0] ../source4/smbd/server.c:370(binary_smbd_main)
Jan 28 06:49:51 xxxx samba[1213]:   samba version 4.1.0 started.
Jan 28 06:49:51 xxxx samba[1213]:   Copyright Andrew Tridgell and the Samba Team 1992-2013
Jan 28 06:49:52 xxxx samba[1214]: [2014/01/28 06:49:52.810435,  0] ../source4/smbd/server.c:492(binary_smbd_main)
Jan 28 06:49:52 xxxx samba[1214]:   samba: using 'standard' process model
Jan 28 06:49:55 xxxx samba[1238]: [2014/01/28 06:49:55.189132,  0] ../source4/smbd/service_stream.c:346(stream_setup_socket)
Jan 28 06:49:55 xxxx samba[1238]:   Failed to listen on 0.0.0.0:389 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
Jan 28 06:49:55 xxxx samba[1238]: [2014/01/28 06:49:55.190110,  0] ../source4/ldap_server/ldap_server.c:821(add_socket)
Jan 28 06:49:55 xxxx samba[1238]:   ldapsrv failed to bind to 0.0.0.0:389 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
Jan 28 06:49:55 xxxx samba[1238]: [2014/01/28 06:49:55.190656,  0] ../source4/smbd/service_task.c:35(task_server_terminate)
Jan 28 06:49:55 xxxx samba[1238]:   task_server_terminate: [Failed to startup ldap server task]
Jan 28 06:49:55 xxxx samba[1214]: [2014/01/28 06:49:55.196102,  0] ../source4/smbd/server.c:211(samba_terminate)
Jan 28 06:49:55 xxxx samba[1214]:   samba_terminate: Failed to startup ldap server task

そのちょっと前をさかのぼってみるとこんなのが・・・
Jan 28 06:49:50 xxxx slapd[1028]: slapd starting

で、今回sambaを入れた手順として、

  1. slapdをインストールしないとsambaがうまく動かない
  2. かといってslapdが動いているとsambaが動かない
  3. slapdはインストールするとけどサービスから解除しておく
どうも、upgradeのタイミングでslapdのサービス登録が復活していたみたいですね。
というわけで
$ sudo update-rc.d -f slapd remove
$ sudo shutdown -r 0
で直りました。


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-03

centosのVMファイルを移動した後にネットワークに繋がらない時

/etc/init.d/network restartをした後、次のようなメッセージが出る。
Device eth0 does not seem to be present, delaying initialization
VMファイルを移動した後にMACアドレスの古い情報が残っているのが原因

解消方法
ifconfig -a でMACアドレス調べる
/etc/sysconfig/network-scripts/ifcfg-eth0 のHWADDRを変更
/etc/udev/rules.d/70-persistent-net.rules のeth1を消してeth0のMACを変更
reboot
http://dharry.hatenablog.com/entry/20120307/1331055287


2012-08-10

WinPe-tchめも

・Directは追加組み込みがある
・Miniは最少セット

Direct
・x86/x64両方作れる?
・パーティションツールはインストーラを指定する必要ある
・Offline Defenderはなぜか動かない
・PortableAppsのランチャーは動かないのでOUTPUTディレクトリ以下の本体を起動する必要がある?
・PortableAppsでIronがなぜか動かない
・REを選択するとなぜか起動できない(bitあってなかったかも)
・bootrec.exe入らない?自分で組み込む場合はbitのあったbootrec関連ファイルを組み込む必要あり
windows\system32\bootrec.exe

windows\system32\wer.dll

windows\system32\ja-JP\bootrec.exe.mui

windows\system32\ja-JP\wer.dll.mui
を組み込むようにする





Mini
・x86のみ?
・bootrec.exe入るので最少セットで機能的

HDD複製(HDDが一部壊れた状態で)

状況

元のHDD
HDD1(MBR:1TB)
Partition1 DELLの管理領域
Partition2 RECOVERY領域
Partition3 Cドライブ
Partition4 Dドライブ

どうやらDドライブ領域にエラーがあるようで
あるファイルをコピーしようとするとWindowsがフリーズする。
そのファイルを削除すると、しばらくするとまた別のファイルがフリーズ要素となる。
HDDメーカーであるSeagateの診断ツールで"9BE4E2E3"というエラーが出ている。
Seagateのサイトで自分のHDDの保証状況を確認すると販売元へ問い合わせろとある。
販売元はDELLで延長サポートやらをつけてまだ保証期間内だったのでDELLの診断ツールを使ってみると異常なし。
とりあえずサポート(チャット)に問い合わせてみたところ
「弊社の診断プログラムで異常と出なければ異常ではありません。これ以上のサポートは有償になります。」といった内容の訳の分からないタライ回しにあう。
※大抵の異常に対して「異常なし」と返す診断プログラム作れば儲かりまくり!?

役に立たない。もう二度とDELLでは買わない。と言い残してチャットを去り、
しょうがないのでHDDを購入することにした。
今の機種"DELL Studio XPS 7100"にはHDDをが2つ付けられるみたいなので
CドライブとDドライブを物理的に分けてみることにした。
というわけで、、、

複製先のHDD(予定)
HDD1(MBR:500GB)
Partition1 DELLの管理領域
Partition2 RECOVERY領域
Partition3 Cドライブ

HDD2(MBR:1TB)
Partition1 Dドライブ

こんな感じにしてみる。


まず、もともとのPartition4つは"Acronis True Image Home 2011"を使ってバックアップをとった。
基本的にパーティションのバックアップをとったが、Dドライブだけはエラーがあるようなのでファイル単位でバックアップをとった。
後々バックアップをディスクイメージとしてマウントしたりできるのでとても便利

で、それを復元したいけど、TrueImageの復元機能を使うと、余った領域を全て最後のパーティションの領域に組み込んでしまうみたいなので別のアプリを使ってみた。

"EASEUS Partition Master 9.1.1 Home Edition"というフリーソフトで
パーティションのコピーを含めた操作が色々行える。

なのでまずTrueImageでディスクイメージをマウントしてドライブとして認識させ、
PartitionMasterで複製先のHDD1に
・Partition1 DELLの管理領域
・Partition2 RECOVERY領域
・Partition3 Cドライブ
を複製した。

同様にHDD2に対してDドライブを複製した。

データの複製という意味ではこれで完了だけど、
このままだとパソコンを起動した際にWindowsを認識してくれない。

今回複製したいHDDは"MBR"というフォーマットが使用されているので
それを前提に説明する。このMBRというのは先ほどのPartitionMasterから確認できる。
また、パーティションはすべて基本領域とする。拡張領域だともっと複雑かも。 http://park12.wakwak.com/~eslab/pcmemo/hdisk/hdisk3.html
まず、HDD(MBR)に記録されている情報は、
|MBR|Partition1|Partition2|・・・|
という感じに、先頭に管理情報が記録されている。
ここの中身はWikipediaを見るとわかるけど
ブートマスターレコード
ブートストラップローダというセクションがあり、そこに起動のためのプログラムがインストールされている。
パソコンは最初にHDDのブートストラップローダにアクセスして起動プログラムを実行する仕組みになっている。
パーティションの複製だけではここがうまく設定できていない。

今回試してはいないが、恐らく複製しなくてもWindowsの回復コンソールを使えば起動プログラムをインストールできる。
ちなみにWindows7だとコントロールパネルのバックアップ作成→システム修復ディスクの作成で回復用CDが作成できる。
ただ今回のこのDELLマシンからだと、システム修復ディスクを作成しても、なんと起動できないw
エラーコード 0x4001100200001012 が出てしまう。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1452430939

本来ならWindows7のインストールディスクでもいいらしいが、DELLにはそんなものついてこない。
で、次の候補として、Windows7やServer2008 R2の評価ディスクがある。
これはココからダウンロードできるはずなのだが、なぜかできない。
他にも困っている人がいたのでやり方が悪いわけではなさそう。
http://social.technet.microsoft.com/Forums/ja-JP/w7itprogeneralja/thread/85c8543b-42c1-4da2-ac67-304754da2dc6/

torrent使えば野良リカバリディスクも手に入るっぽいけど怪しくて使えない。
手詰まりか!?っと思ったが、幸い自分は学生であるため、Microsoftのドリームスパークというプログラムに参加していて、そこからWindows Server 2008 R2 64bit 正規品がダウンロードできた。
それを使って今回の問題に対処した。

と、その前に、複製元HDDでbootパーティションがどこにあるのか調べておく必要が有る。
windowsのディスク管理やPartitionMasterでもわかるとは思うが、OEM領域のためか表記が少し違うため、 念の為今回はLinuxから確認した。
ディスク起動できるLinux、Knoppixを使う。
サイトからisoをダウンロードしてきてDVDに焼く。
複製元と複製先のドライブを装着し、Knoppixを起動。
※なぜか画面描画がおかしくてフリーズした感じだったけど触れば動いた
左下の黒いコンソールアイコンをクリックしコンソール起動。
$ parted -l
これで各HDDとそのパーティションがわかる。
どうやら複製元HDDでは、リカバリ領域にbootフラグが立っている。
ここで、複製先HDDではbootフラグがたっていなかったため、複製先HDDを操作する。
$ sudo parted /dev/sdx
※parted -lの結果でxの部分がかわる、複製先を選択
複製元リカバリ領域のパーティション番号を調べ(今回2)
> print
> set 2 boot on
> q

これで複製元と同じパーティションにbootフラグがたった。
Windowsのブートの仕組みはXPまでとVista以降とで異なり、
Windows7では
パソコン起動→MBR領域→bootパーティションの bootmgr ファイル(他にも?)→Windowsパーティション という風に辿っている。
あとはこのbootmgrファイルが正しければ起動するはず。

ためしにこの状態で複製先HDDのみを装着して起動してみたが無理だった
(試行錯誤しすぎてエラー内容不明)

これを修復するには
bootrec.exe、bcdedit.exe、bcdboot.exeが必要だが、
bootrec.exeだけはインストール済みのWindowsには入っておらず、
回復コンソール等でしか使えないコマンドになっている。
そのため、ここで2008R2のディスクを使う。
複製先HDDのみを装着状態で、2008R2のインストールディスクを起動する。
日本語を選択した後、「コンピューターを修復する」を選択。
システムイメージを使うかきかれるので使わない方(上)を選択する。
するとコマンドプロンプトを起動できるようになるので起動する。
x:\sources\>というプロンプトが開始されたので、
> cd x:\windows\system32
ここでまずやるべきらしいコマンドを実行する
> bootrec /fixboot
> bootrec /fixmbr
※何をしているのか詳細不明
これで直るケースもあるらしいので一旦確認
> bcdedit
device などが Unknownになっていて(試したら)起動できない状態であった。
次にやるべきコマンドを実行し、
ブートするシステムのエントリーを再構築するコマンドを実行する。
> bootrec /rebuildbcd
するとWindows 7 を検知してエントリーに追加するかきかれるのでYes
確認するとUnknownが消えてE:とつくようになった
>bcdedit
この状態で一旦再起動して起動できるか試してみる
が・・・BOOTMGR is Missingと出てしまった。

このエラーメッセージはパーティションの先頭に記載されているメッセージで、bootmgrファイルが見つからない時に表示される。
つまり、MBRまでは正常に読み込んでいるけど、bootパーティションのbootmgrに異常があるということになる。
先ほどのrebuildbcdはそこをうまいことしてくれるんじゃないかといいたいが、さらに次の対処となるコマンドを実行する。
これはWindowsフォルダからブートエントリー情報を抽出して、指定のドライブに出力するコマンド。

その前に、ドライブレターを知る必要があるので調べる。
DISKPARTがインストールされているのでそれを使う。
> diskpart
diskpart> list disk
これでディスク一覧が出る。サイズ等で区別できるならここでドライブレターが判明する。
わからなければさらに、ドライブを選択してパーティション情報表示できる。
diskpart> set disk [0-?]
diskpart> list partition

今回はリカバリ領域がDドライブ、windows領域がEドライブだった
つまり、EドライブのWindows情報を、Dドライブのbootmgrに出力する必要がある。
> bcdboot e:\windows /l ja-JP /s d:

これでこれ以上ない対策をしたことになる。
再起動してみると・・・起動!
以上でDELLのHDDの複製換装でした。保証外になると思うのと手順はあまり理解していない部分もあるので注意です。

ちなみに、記事にはできるだけ結果論を書いてあるけども、
試行錯誤の段階でWindowsPEを作成しました。
WindowsPEっていうのはKnoppixのWindows版みたいなもの。
なんだかんだでWindowsの方がリカバリ作業がやりやすい箇所もあるため1つもっておいたほうが心強い。 http://kiki2.suppa.jp/pe2/winpetch.htmのWinPe-tch Mini
を使えばとりあえず簡単に作れる。Directの方が高機能だけど作ってみるとWindows Boot Mangerでエラーが出た。
Windows7インストールイメージがあれば、回復環境(WindowsRE)も作成できるらしいが未確認。
PEにはbootrecがついてなく、REにはついてくるそうです。そういう意味で今回は真の意味で助けにはならなかった。


【送料無料】Acronis True Image Home 2012Plus
【送料無料】Acronis True Image Home 2012Plus
価格:9,080円(税込、送料別)
Acronis True Image Home 2012 Plus Academ -
Acronis True Image Home 2012 Plus Academ -
価格:6,610円(税込、送料別)

2012-08-08

epgdumprにパッチをあてる

以前pt2をインストール手順を記載した際、epgdumprは素のまま入れてパッチをあてませんでした。
今回はubuntuやrecpt1のアップグレードにあわせてパッチを当ててみようと思います。

参考:
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?%E5%9C%B0%E3%83%87%E3%82%B8%2FKTV-FSUSB2

まずはパッチをダウンロードしてubuntuのワークフォルダにコピーします

http://www.honeyplanet.jp/epgdumpr2-utf8_segv.patch.gz
SEGV対策パッチ

http://www.mediafire.com/2sen
DTV→
up0246.zip
epgdump r2 184byte オーバーフロー修正パッチ (fix_overflow_184.patch)
up0248.zip
epgdump r2 セクション読み込みオーバーフロー修正&ファイルオープン状況確認パッチ
(fix_overflow_maxseclen.patch)



次にパッチを当ててからmake

$ wget "http://www.mda.or.jp/epgrec/index.php?plugin=attach&refer=%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%89%8D%E3%81%AE%E6%BA%96%E5%82%99&openfile=epgdumpr2-utf8.tar.gz" -O epgdumpr2-utf8.tar.gz
$ tar -zxvf epgdumpr2-utf8.tar.gz
$ wget http://www.honeyplanet.jp/epgdumpr2-utf8_segv.patch.gz
$ gunzip epgdumpr2-utf8_segv.patch.gz
$ unzip up0246.zip
$ unzip up0248.zip
$ cd epgdumpr2
$ patch -p1 < ../fix_overflow_184.patch
$ patch -p1 < ../fix_overflow_maxseclen.patch
$ patch -p1 < ../epgdumpr2-utf8_segv.patch
$ make

ここでエラーが出た
eit.c:295:31: error: array subscript is above array bounds [-Werror=array-bounds]
cc1: all warnings being treated as errors
make: *** [eit.o] エラー 1

http://baalzephon.dyndns.org/tech/index.php?Linux%2F%E3%83%86%E3%83%AC%E3%83%93%E9%96%A2%E9%80%A3%2Fepgrec
を参考にパッチを当てた
パッチを作りました→epgdumpr2-utf8_arraybounds.zip

ワークフォルダに移動して
$ wget --trust-server-names http://db.tt/iE8qfFka
$ unzip epgdumpr2-utf8_arraybounds.zip
$ cd epgdumpr2
$ patch -p1 < ../epgdumpr2-utf8_arraybounds.patch

リトライ
$ rm *.o
$ make
$ sudo make install
成功!

動作確認
$ recpt1 --b25 --strip 22 30 test.ts
$ epgdump test test.ts - | less


【アースソフト】地デジチューナー PT3 Rev.A
【アースソフト】地デジチューナー PT3 Rev.A
価格:13,860円(税込、送料別)

2012-08-07

KindleFireにCyanogenMod9を入れる

これまでCM7で満足していたけど、調べてみるとなんと!CM10まで出ていました。
しかしCM10は出たばっかりみたいなので安定しているらしいCM9を入れてみました。

いくつかあるようで
ネットに情報がよく転がっている
http://forum.xda-developers.com/showthread.php?t=1411895
の他にも
http://forum.xda-developers.com/showthread.php?t=1619550
http://forum.xda-developers.com/showthread.php?t=1689000
http://forum.xda-developers.com/showthread.php?t=1528024
などがあるみたい。

このうち、14118951528024を試してみた。
とりあえず最初に試した1411895の手順を記録する。
1411895は上書きアップグレードができるが、1528024は再インストールになる。
手順自体はだいたい他も同じ。たいてい手順も一緒に載ってるのでその通りに行えばよい。


前提:以前の記事にてTWRPが入っていること

1. バックアップ
Titanium Backupなどを用いてアプリをバックアップする。
KF(CM7)を再起動し、炎マークが出たら電源ボタンをチョイチョイ押してTWRPを起動する。
Backup→
System/Data/Boot/Recovery/.android_secureにチェックを入れる(全部)
Backup now→
KF再起動
Reboot→System

2. ROMダウンロード
windowsを使いxdaのフォーラムから
cm9-02-24.zipとgapps-ics-20120224-signed.zipをダウンロードする。
その後、KFを通常起動してUSB接続→USB認識させる。
windowsからzipファイル2つをKFへコピーする。

3. CM9適用
KFにて再度TWRPを起動する。
Install→
cm9-02-24.zipを選択→Flash
"cannot load volume /misc!"は無視する。
Wipe Cache /Dalvik→

4. google apps適用
TWRPにて同様に
Install→
gapps-ics-20120224-signed.zipを選択→Flash
Wipe Cache /Dalvik→

上記にてCM9化完了

5. 起動
Reboot→
初回は例によって起動が長い
新しい起動画面は綺麗な感じ
"Android is upgrading..."という工程が入る。謎
ホームは初期化されるらしいのでアイコンを再配置・・・

6. 日本語フォント
そのままだと中華フォントのため
ファイルエクスプローラーを導入する
※ES ファイルエクスプローラーなど
フォントファイルを用意しDroidSansJapanese.ttfという名前にする。
エクスプローラを用いて/system/fontsフォルダに入れる。
パーミッションをwr/r/rにする。
この時SuperUserが必要になるのでSuperuser(アプリ)が起動する。(CM7に入っていた)

"/system/etc/fallback_fonts.xml"をテキストエディターで開く

<familyset>セクションの間に
 <family>
  <fileset>
   <file>DroidSansJapanese.ttf</file>
  </fileset>
 </family>

を挿入する。

KFを再起動する。

ちなみに中華フォントの見分け方は
文字入力画面で糸偏のついた漢字を入れてみると
なんかおかしいのですぐわかる。

7. 設定
設定画面への行き方は
右下のタスクトレイ的なところをタップ→時計の下のゲージつまみをタップ→設定をタップ
※ここではROMによってことなるLauncherの設定は省略

DEVICE→Sound→Volumes
→Link volumes
(恐らく)各種音量のリンク、ON
(恐らく)各種音量のミュート状態リンク、ON
※なぜかチェック状態を保存できないので機能していないかも

DEVICE→Display
→Sleep
スリープまでの無操作時間、30minutes

PERSONAL
→Security→Screen lock
画面ロックの方式、PIN
→Security→Encrypt table
データを暗号化する、今回は試さない
→Language&input→Language
言語はCM7の続きで、English(United States)
→Language&input→Spelling crrection
スペルチェック、OFF
→Language&input→KEYBOARD&INPUT METHODS
入力方式、Simeji

以上でCM9化&設定完了。
ちょっと使ってみた感じだとクールになったこと以外特に変化はないけど
クールになったのだけで満足しました。

ROM同梱のランチャーについては
1411895はTrebuchet
1528024はNovaLauncherとGo Launcher HD
となっている。
はっきりいってTrebuchetは低機能すぎて使えなかった。


CM9自体の問題も含んでるかもしれないけど前使ってたCM7との比較

CM9自体について
◯全体的にクール

1411895(by bl1nkk)
×なんとなくもっさりしてるような・・・
×起動毎に時計がエラーを吐く
×電源ボタン長押しのメニューが貧弱(未実装?)
×プロファイル切り替え機能がない(未実装?)
×ボリュームのリンクが機能しない(KFでは無理とか?)
×通知画面のカスタマイズができない(未実装?)
というかβ版止まりっぽい、最終更新が半年前なのを考えると入れないほうが良さそう

1528024(Enegy CM9 by NRGZ28)
◯よくカスタマイズされていてよりクール
×ボリュームのリンクが機能しない(KFでは無理とか?)
×上書きインストールができない?
こっちはCM7で使っていた一通りの機能が実装されていて完成された感がある
1411895と比べると断然こっちの方がよかった
しかし上書きインストールができないため、
事前にアプリのバックアップ等しっかりやること。



マーケットにあるものも含めてランチャーアプリを比較してみた
「Trebuchet」
◯ウィジェットプレビュー可能
×低機能
×ウィジェットが無駄に幅を取る
×ドックがない(未実装?)
×グリッドサイズ変更ができない(未実装?)

「Nova Launcher」
◯設定画面がICSと同じ形式
◯ウィジェットプレビュー可能
×ジェスチャーが有料のみ

「Holo Launcher」
◯Up/Downのみジェスチャー可能
△ダブルタップジェスチャーが有料?
×アイコンラベルが狭い・・・?
×電池食う

「ADW.Launcher」
◯大体良い
×ウィジェットが無駄に幅を取る
×CM7で使ってて飽きた

ん~、コレっていう決定版が無くて悩むけど、
この中ではNova Launcherが良かった。
問題はジェスチャーが有料版しか無いので
Nova Launcher有料版を買う予定。


参考:
http://forum.xda-developers.com/showthread.php?t=1411895
http://netbuffalo.doorblog.jp/archives/3927628.html