このブログを検索

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

2015-04-13

RAIDの再構築(LVMあり→LVMなし)

半年くらい前の出来事だが、RAID on LVM → RAID を試したのでその手順をメモ。
書き溜めていたもののコピーなので細かいところは間違えているかも。

今回やることは、、、

HDD2台でRAID1構成をしていたが1台死んでしまった。
そこで、再構成するついでに、管理が面倒な上に使っていなかったLVMを解除したい。

HDD1 LVMあり
HDD2 購入直後

ここから

HDD1 RAID1(LVMなし)
HDD2 RAID1(LVMなし)
という構成にしたい

HDD2パーティショニング
HDD1→HDD2ファイルコピー
HDD1パーティショニング(初期化)
HDD2をメインにHDD1と同期
ともっていきたい

参考:
http://complete.ddo.jp/cent5/lvm2raid.html



CDドライブからGPartedを起動
/dev/sdbを開く
パーティションテーブルGPTを作成
Excelの通りにパーティショニング
bootはどうやらGrubであれば不要らしいので今回作らない
(2017/07/03 Excelの内容が不明だったので追加。ただ時間が経ってるので中身がこれであってるか不明)

現在の状態を表示
$ sudo parted -l
[sudo] password for default:
Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                  grub  bios_grub
 2      2097kB  271MB   268MB   ext4            boot  msftdata
 4      271MB   1997GB  1997GB                  data  lvm
 3      1997GB  2000GB  3221MB  linux-swap(v1)  swap


Model: ATA ST2000DM001-1ER1 (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                        bios_grub
 4      2097kB  1997GB  1997GB                        raid
 3      1997GB  1997GB  1049kB                        msftdata
 2      1997GB  2000GB  3221MB  linux-swap(v1)

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg0-lv1: 1977GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  1977GB  1977GB  ext4


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg0-lv0: 20.0GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  20.0GB  20.0GB  ext4

$ sudo vgdisplay -v
    Finding all volume groups
    Finding volume group "vg0"
  --- Volume group ---
  VG Name               vg0
  System ID          
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.82 TiB
  PE Size               4.00 MiB
  Total PE              476074
  Alloc PE / Size       476074 / 1.82 TiB
  Free  PE / Size       0 / 0
  VG UUID               QFEMD8-l0bT-Jl0s-Vzqr-7723-jRGH-VjU5do
 
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                P9B0Kf-uAS9-a80Y-X9ef-8qYx-I2pY-4YTyZM
  LV Write Access        read/write
  LV Creation host, time ,
  LV Status              available
  # open                 1
  LV Size                18.62 GiB
  Current LE             4768
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0
 
  --- Logical volume ---
  LV Path                /dev/vg0/lv1
  LV Name                lv1
  VG Name                vg0
  LV UUID                5YP3eC-1QyR-JqMf-0jld-Le0H-axrL-Kk0i1a
  LV Write Access        read/write
  LV Creation host, time ,
  LV Status              available
  # open                 1
  LV Size                1.80 TiB
  Current LE             471306
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
 
  --- Physical volumes ---
  PV Name               /dev/sda4  
  PV UUID               9n3zGy-kqnn-w8wo-cvE7-OdnV-Du8C-34ZoW1
  PV Status             allocatable
  Total PE / Free PE    476074 / 0


$ df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0   19G  2.8G   15G  16% /
none                 4.0K     0  4.0K   0% /sys/fs/cgroup
udev                 982M  4.0K  982M   1% /dev
tmpfs                199M  664K  198M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 993M     0  993M   0% /run/shm
none                 100M     0  100M   0% /run/user
/dev/sda2            240M   63M  161M  29% /boot
/dev/mapper/vg0-lv1  1.8T   63G  1.7T   4% /home


$ sudo aptitude install mdadm

縮退モードでRAID-ARRAY作成
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb4

$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb4[1]
      1950234432 blocks super 1.2 [2/1] [_U]

$ sudo sh -c "mdadm --examine --scan >> /etc/mdadm/mdadm.conf"


PV作成
$ sudo pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created
VGにPVを追加
$ sudo vgextend vg0 /dev/md0
  Volume group "vg0" successfully extended
外したいPVのデータを他のPV(/dev/md0)に移動
$ sudo pvmove /dev/sda4
  /dev/sda4: Moved: 99.9%
  /dev/sda4: Moved: 99.9%
  /dev/sda4: Moved: 100.0%
  /dev/sda4: no pvmove in progress - already finished or aborted.



initrd 作成
RAID1 を含む initrd を作成します。

$ uname -r
3.13.0-35-generic
$ sudo mkinitramfs -o /boot/initrd.img-3.13.0-35-generic 3.13.0-35-generic

bootパーティションのデータをrootパーティションにコピー
$ sudo cp -p -r /boot /home/.
$ sudo umount /boot
$ sudo cp -p -r /home/boot/* /boot/.

$ sudo vim /etc/fstab
proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/vg0-lv0 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=56c3ebdd-7d85-421b-888a-217b6a500ab1 /boot           ext4    defaults        0       2
/dev/mapper/vg0-lv1 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=25bc96ac-e59d-4061-ae56-201ea16bc663 none            swap    sw              0       0

次のように変更する

proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/vg0-lv0 /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
#UUID=56c3ebdd-7d85-421b-888a-217b6a500ab1 /boot           ext4    defaults        0       2
/dev/mapper/vg0-lv1 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=25bc96ac-e59d-4061-ae56-201ea16bc663 none            swap    sw              0       0


$ sudo grub-install /dev/sda

$ sudo shutdown -h 0
そして電源ON

"no bootable device"エラーが出てGrubすら起動しない。
以前もあったので同じ対処をする。(どうして戻ったのかは不明)

http://www.ubuntulinux.jp/download/ja-remixから"ubuntu-ja-14.04-desktop-amd64.iso"をダウンロードしてCDに焼く。 ディスクを入れて起動する。
"Ubuntuを試す"で起動してDash→検索"terminal"
$ sudo fdisk /dev/sda
[GPTをサポートしません・・・]とか言われるけど無視する。
とりあえず状態を確認
: p
デバイス ブート 始点 終点 ブロック ID システム /dev/sda1 1 39070・・・ 19535・・・ ee GPT
パーティションをアクティブにする
"a"→"1"→"w"
さらにエラーが出るが無視する
$ sudo shutdown -h 0

LiveCDを抜いて再起動
起動はするが、起動時に"Error: diskfilter writes are not supported"
というエラーが出ている。RAID+LVMの組み合わせで出る模様。
このままでも問題はないらしいが一応修正する。
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320/comments/34

/etc/grub.d/00_headerのrecordfailセクションを書き換える。
もともと
if [ "$quick_boot" = 1 ]; then
    cat <<EOF
function recordfail {
  set recordfail=1
EOF
    FS="$(grub-probe --target=fs "${grubdir}")"
    case "$FS" in
      btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
        cat <<EOF
  # GRUB lacks write support for $FS, so recordfail support is disabled.
EOF
        ;;
      *)
        cat <<EOF
  if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
EOF
    esac
    cat <<EOF
}
となっている部分を
if [ "$quick_boot" = 1 ]; then
    cat <<EOF
function recordfail {
  set recordfail=1
EOF
# added begin
    GRUBMDDEVICE="$(grub-probe --target=disk "${grubdir}")"
    GRUBLVMDEVICE="$(grub-probe --target=disk "${grubdir}")"
    if echo "$GRUBMDDEVICE" | grep "/dev/md" > /dev/null; then
        cat <<EOF
  # GRUB lacks write support for $GRUBMDDEVICE, so recordfail support is disabled.
EOF
    elif echo "$GRUBLVMDEVICE" | grep "/dev/mapper" > /dev/null; then
        cat <<EOF
  # GRUB lacks write support for $GRUBLVMDEVICE, so recordfail support is disabled.
EOF
    else
# added end
        FS="$(grub-probe --target=fs "${grubdir}")"
        case "$FS" in
          btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
            cat <<EOF
  # GRUB lacks write support for $FS, so recordfail support is disabled.
EOF
          ;;
          *)
            cat <<EOF
  if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
EOF
        esac
# added begin
    fi
# added end
    cat <<EOF
}
に変更する。



$ sudo update-grub
$ sudo shutdown -h 0

再起動して起動できることを確認

$ sudo pvscan
[sudo] password for default:
  PV /dev/sda4   VG vg0   lvm2 [1.82 TiB / 1.82 TiB free]
  PV /dev/md0    VG vg0   lvm2 [1.82 TiB / 228.00 MiB free]
  Total: 2 [3.63 TiB] / in use: 2 [3.63 TiB] / in no VG: 0 [0   ]

$ sudo vgreduce vg0 /dev/sda4
  Removed "/dev/sda4" from volume group "vg0"

$ sudo pvremove /dev/sda4
  Labels on physical volume "/dev/sda4" successfully wiped

$ sudo shutdown -h 0



GPartedで/dev/sdaのbootパーティションと旧LVMパーティションを削除し、
/dev/sdbと同じ構成にする
前のパーティションのデータが残っているようだが無視する

ここで再起動するとまた
"no bootable device"エラーが出た。
再びUbuntu LiveCDでフラグを立てる操作をする


$ sudo parted /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                          
Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                  grub  bios_grub
 4      2097kB  1997GB  1997GB  ext4                  msftdata
 3      1997GB  1997GB  1049kB                        msftdata
 2      1997GB  2000GB  3221MB  linux-swap(v1)

(parted) set 4 raid on                                                  
(parted) print                                                          
Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      1049kB  2097kB  1049kB                  grub  bios_grub
 4      2097kB  1997GB  1997GB  ext4                  raid
 3      1997GB  1997GB  1049kB                        msftdata
 2      1997GB  2000GB  3221MB  linux-swap(v1)

(parted) quit

$ sudo mdadm --manage --add /dev/md0 /dev/sda4
mdadm: added /dev/sda4

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda4[2] sdb4[1]
      1950234432 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.1% (3629504/1950234432) finish=329.3min speed=98504K/sec
   
unused devices: <none>

要否不明だけど一応mdadm.confを再設定

$ sudo vim /etc/mdadm/mdadm.conf
末尾の"ARRAY"から始まる一行を削除

$ sudo sh -c "mdadm --examine --scan >> /etc/mdadm/mdadm.conf"

$ sudo grub-install /dev/sdb

cat /proc/mdstatが100%になったら作業完了

$ sudo shutdown -h 0

再起動して最終的な起動確認

以上で完了



ただこれだと、partedした時にRAID ARRAYにしたパーティションのFile systemが以前のext4のまま消えない。
後日これを解消した。
手順は
1. mdadmでmd0にfailコマンドを実行
2. mdadmでmd0から/dev/sdaを除去
3. GParted起動
4. パーティションを"cleared"でフォーマット ※パーティション情報を初期化するものらしい
5. Ubuntu LiveCD起動
6. a→1→wを実施する
7. mdadmでmd0に/dev/sdaを再度追加
8. 同期を待つ
で成功した
※もしかしたら4のあと、一度"no bootable device"を見ないといけないかも
 一度、エラーを確認せずに続けてやったら効果がなかった



その他参考にしたと思われるURL
http://xelalko.blogspot.jp/2010/08/ubuntu910-nas-on-raid15.html
http://xelalko.blogspot.jp/2010/08/ubuntu910-nas-on-raid14.html
http://www.linuxmania.jp/raid_md_grub.html
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a060raid1.html
http://blog.seishiono.net/entry/2014/05/03/223948
http://www.maruko2.com/mw/CentOS/LVM%E3%81%AE%E8%B5%B7%E5%8B%95%E4%B8%AD%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%82%92SSD%E3%81%AB%E8%A4%87%E8%A3%BD%E3%81%97%E4%BA%A4%E6%8F%9B%E3%81%99%E3%82%8B
http://ubuntu.hatenablog.jp/entry/20101228/1293536177
http://qiita.com/kudotty/items/264d255fdffffe9abc64
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1274320/comments/34

2015-03-01

Ubuntuのセキュリティパッチのみを自動で適用する

$ sudo aptitude update
$ sudo aptitude install unattended-upgrades
$ vim /etc/apt/apt.conf.d/50unattended-upgrades
セキュリティのみコメント解除されていることを確認

メール通知
Unattended-Upgrade::Mail をコメント解除、必要に応じてメールアドレス設定

自動再起動をやめる ※未確認
Unattended-Upgrade::Automatic-Reboot "false" をコメント解除

$ sudo dpkg-reconfigure -plow unattended-upgrades
Yes

完了

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-02-11

お名前.com VPS(KVM) にMT4をインストールする

FXの自動売買用にMT4を導入しているのですが
今はお名前.comのWindows Server 上に設置しています。
Linuxサーバの方が若干安いのでそっちに乗り換えを模索中。
まだ無料期間ですがインストールに成功しました。Windows Server も無料期間だからそのまま解約にするつもり。

ポイント
・Linux(CentOS)にMT4をインストールする
・リモートデスクトップ環境を構築する
・リモートデスクトップにはxrdpというサーバを使う
・xrdpは内部的にはvncサーバに接続しに行く
・日本語入力の問題があり、ユーザパスワード関連に記号は、ひと通り手順が終わるまではセットしないほうが良い


OSインストール
お名前.com VPS(KVM) のコントロールパネルにログインする
カスタムOSインストールとして Cent OS 6.4 64bit をインストールする
・Virtio ON
・ビデオデバイス vmvga (こっちのほうが解像度高くなるっぽい?
実行するとメディアが挿入された状態となるので起動する
・Install or Upgrade exists ....
・Language: Japanese
・Keyboard Type: jp106
・IPv6 Support: OFF
・システムクロックでUTCを使用: ON
・どのタイプのインストールをするか: すべての領域を使用する
・インストール先のデバイス: 20GB
・データストレージデバイス: 180GB
・Basic Serverを選択

パッケージ選択(Basic Serverからの差分)
※一部よくわからないものもONにしてます
※将来的な用途のことも含めているのでMT4自体には関係無いものもあります
アプリケーション
・Emacs ON
・インターネットブラウザ ON
サーバ
・FTPサーバ ON
・システム管理ツール ON
・電子メールサーバ ON
システム管理
・システム管理 ON
デスクトップ
・X Window System ON
・グラフィカル管理ツール ON
・デスクトップ ON
・デスクトッププラットフォーム ON
・フォント ON
・リモートデスクトップ接続クライアント ON
・レガシー X Window システムの互換 ON
・入力メソッド ON
・汎用デスクトップ ON
ベースシステム
・java プラットフォーム OFF
・Perlのサポート OFF

進めてインストール完了させる
再起動してrootでログイン
上部のシステム→管理→ユーザとグループで一般ユーザを作成
rootをログオフして一般ユーザで入り直す

VNCサーバ(tigervnc)インストール
$ su
# yum -y install tigervnc*
# vim /etc/sysconfig/vncservers

USERNAMEには一般ユーザ名を入れる
VNCSERVERS="2:USERNAME"
VNCSERVERARGS[2]="-geometry 1920x1024 -nolisten tcp -localhost" 
localhsotにすることで、VNC接続を外部からさせない。
なお、ポートは5900+先の設定ファイルの数字(2)で5902となる。

# exit
VNCパスワードをセットする
長すぎるとログイン出来ないような・・・?
$ vncpasswd

本来はこれでOKだけどテストするためにポートを開放する
$ su
# vim /etc/sysconfig/iptables
dport 22の記載がある下辺りに追記
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5902 -j ACCEPT
# /etc/init.d/iptables restart
# /etc/init.d/vncserver restart

サービス化
# chkconfig vncserver on


この状態で、外部からVNCクライアントで接続してみて確認。
今のところ通信が暗号化されていないので注意。
問題なさそうならiptablesから記述をコメントアウトしてiptables再起動

今回解決はできなかったけどプロセス再起動時に
"xauth: timeout in locking authority file /home/root/.XauthXXXXX"と出て時間がかかる
たぶん、rootユーザでサービスを実行するけど、内部的には一般ユーザで実行されるため、rootの設定ファイルを見に行こうとしていると思われる。
chkconfigによる自動起動時にはエラーが起こっていないと・・・思いたい。
一般ユーザにて/usr/bin/vncserverを起動する際には発生しない。


リモートデスクトップサーバ(xrdp)をインストール
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# yum --enablerepo=epel -y install xrdp

# vim /etc/xrdp/xrdp.ini
xrdp1セクションのところを変更
username=     ←空にする
port=5902     ←vncポートを指定
port=-1の場合、一般ユーザでログインして新規に一時的なvncセッションを立ち上げることになる模様。
そうすると同一セッションに繋ぎ直すことがやや難しいので注意。
ちなみに、port=-1の時に同一セッションにつなぐには、同じ解像度で繋ぐ必要がある。
このことから、PCとiPhoneとで同一セッションに繋げなかった。

# /etc/init.d/xrdp restart

ポート開放
# vim /etc/sysconfig/iptables
dport 22の記載がある下辺りに追記
ポートは3389、先ほどのあたりに
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3389 -j ACCEPT
# /etc/init.d/iptables restart

サービス化
# chkconfig xrdp on

これでWindowsのリモートデスクトップから入って
sesman-Xvncとかいうのを選んでログインできるようになる。
パスワードはvncパスワードとなる。
なんかビープ音がなるタイミングでボッボッとなったりプチフリーズしたりするが未解決。

この状態だと英語キーボード配列になっていて、特にパスワードに記号が含まれていると困る。
$ su
# cd /etc/xrdp
# wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
# chmod 644 km-e0010411.ini
これでリモートデスクトップ中に記号が変に入力されたりしなくなる。

# /etc/init.d/vncserver restart
# /etc/init.d/xrdp restart

この状態だとログイン毎にrootパスワードを聞かれてしまう
http://lists.centos.org/pipermail/centos/2012-May/126213.html

$ gnome-session-properties
PackageKit 更新アプレット のチェックを外す

リモートデスクトップによるクリップボード共有は、試した限りではできなかった。
VNCViewerであれば
$ vncconfig &
として開いたウィンドウが開いている間のみ可能だった。


Windowsアプリを動作させるwineをインストールする

ソフトウェアの追加/削除で wine を検索
"a compatibility layer for windows applications"をインストールする


MT4をインストールする
からMT4(mt4setup.exe)をダウンロードして実行して普通にインストールする。
途中、MonoとGeckoのインストールを求められたので、とりあえずYesで進めた。
デスクトップにできたショートカットアイコンで普通に起動成功

データフォルダはMT4のメニューから開けるが
階層が深いところにある
/home/ユーザ名/.wine/drive_c/Program Files (x86)/

以降、個人的なめも

ファイルやりとりのためDropboxをインストールする
http://easyramble.com/install-dropbox-into-centos.html

$ cd ~
$ wget "https://www.dropbox.com/download?plat=lnx.x86"
$ tar xzf dropbox-lnx.x86-2.6.2.tar.gz

$ ~/.dropbox-dist/dropboxd
URLを開けとあるので開いてDropboxアカウントでログイン

$ mkdir ~/bin
$ cd ~/bin
$ wget "https://www.dropbox.com/download?dl=packages/dropbox.py"
$ chmod +x ~/bin/dropbox.py
$ ~/bin/dropbox.py help
$ ~/bin/dropbox.py start
$ ~/bin/dropbox.py status
$ su
# vim /etc/init.d/dropbox
#!/bin/sh

# chkconfig: 345 99 01
# description: dropbox
# processname: dropbox

exec="/home/ユーザー名/bin/dropbox.py"
user="ユーザー名"

start() {
    echo -n $"Starting $prog: "
    su -c "${exec} start" ${user}
}

stop() {
    echo -n $"Stopping $prog: "
    su -c "${exec} stop" ${user}
}

status() {
    su -c "${exec} status" ${user}
}

restart() {
    stop
    start
}

case "$1" in
    start)
        $1
        ;;
    stop)
        $1
        ;;
    restart)
        $1
        ;;
    status)
        $1
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 2
esac
exit $?
# chmod u+x /etc/init.d/dropbox
# chkconfig --add dropbox
# chkconfig dropbox on
# chkconfig --list dropbox
# shutdown -r 0
その後
$ ~/bin/dropbox.py status


EAの共有用にMercurialをインストール
$ su
# cd ~/
# yum -y install python-devel python-setuptools make gcc

# easy_install pip
# pip install Mercurial
# exit
$ cd
$ hg clone https://xxxxxxx/xxxx/ hg
$ cd hg/.hg
$ vim hgrc
追記する
[auth]
auth1.prefix = https://xxxxxxxx/xxxxx/
auth1.username = xxxx
auth1.password = xxxx
※auth1の部分は何でもよい

参考:
http://ubun2.wiki.fc2.com/wiki/xrdp%E5%86%8D%E3%81%B3
http://www.kkaneko.com/rinkou/linux/centosinstall.html
http://pg-forex.com/blog/others/378/
http://articles.mql4.com/1058
http://lfg-net.com/linux/ubuntu/ubuntu-12-04-lts-settings/
http://kyojee.dispatch-site.com/wordpress/2012/07/25/%E3%81%8A%E5%90%8D%E5%89%8D%E3%80%80vps-kvm-%E3%81%A7mt4%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%81%AB/
http://kingpcfx.seesaa.net/article/250642995.html
http://ubuntuforums.org/showthread.php?t=2039022
http://tubapr.hatenablog.com/entry/2013/04/17/173045
http://kingpcfx.seesaa.net/article/250642995.html



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