Samba・subversion・gitlabサーバ構築の覚書
今回したこと
所属する研究室内のファイルサーバはCentOS6上に構築されているが,サポートは2020/11に切れるので,CentOS7での建て替えを行った.
大体はソフトウェア依存の設定が多いのでCentOS6とCentOS7での大まかな手順は変わらなかったが,samba・subversion・gitlabサーバを構築する手順・詰まった点をブログに書ける範囲でまとめる.
試行錯誤しながら構築したので間違っている点があるかもしれません....
概要
- OS: CentOS7 minimal
- ストレージ: 500GB(OS用),8TB x3->RAID5(データ用)
- OSインストール時に500GBのストレージを選択しておく
- 用途: samba・subversion・gitlabサーバ
- 旧データは/data配下にあるので新サーバにscpなどで持ってくる.
構成するデータ構造
/data ┣ /Files(samba) ┣ /svn ┗ /gitlab
手順
1. 基本設定
2. sambaサーバ構築
3. subversionサーバ構築
4. gitlabサーバ構築
5. データ移行
1. 基本設定
1.1 ネットワーク設定
nmcliコマンドでIP固定などをする.
デバイス名を確認したらIPアドレス・ゲートウェイ・DNSを指定.
ここは適宜書き換える
# nmcli d デバイス タイプ 状態 接続 enp1s0 ethernet 接続済み enp1s0 lo loopback 管理無し -- # nmcli c s enp1s0 ipv4.method static ipv4.addresses 192.168.2.230/24 ipv4.gateway 192.168.1.1 ipv4.dns xxx.xxx.xxx.xxx
設定が反映されたかを確認する
# less /etc/sysconfig/network-scripts/ifcfg-enp1s0 BOOTPROTO=none DEVICE=enp1s0 ONBOOT=yes IPADDR=192.168.2.230 GATEWAY=192.168.1.1 DNS1=xxx.xxx.xxx.xxx
インターネットに通じているかを確認する
# ping 8.8.8.8
1.2 SSH設定
SSHポートが22のままだとマズいので変更する.この記事では12345に変更する.
SELinuxを導入し,12345をsshポートとして許可する.
# yum install policycoreutils-python # semanage port -a -t ssh_port_t -p tcp 12345
次にssh設定を変更する.
指定ネットワーク内からのみパスワードログイン可能にする.
# vi /etc/ssh/sshd_config Port 12345 PasswordAuthentication no Match Address XXX.XXX.XXX.XXX/24 PasswordAuthentication yes # systemctl restart sshd
ファイアウォールにsshポートを開け,接続できるようにする.
# firewall-cmd --add-port 12345/tcp # firewall-cmd --runtime-to-permanent success
1.3 ストレージ設定
今回は/dev/sda...500GB,/dev/sd[bcd]...8TB x3が割り当てられている.
割り当てはfdiskコマンドで調べることができる.
sd[bcd]にパーティションを作成し,RAID用にセットする
# parted /dev/sdb (parted) mklabel gpt (parted) mkpart primary ext4 0% 100% (parted) set 1 raid on (parted) quit # parted /dev/sdc (parted) mklabel gpt (parted) mkpart primary ext4 0% 100% (parted) set 1 raid on (parted) quit # parted /dev/sdd (parted) mklabel gpt (parted) mkpart primary ext4 0% 100% (parted) set 1 raid on (parted) quit
mdadmを使用し,RAID5デバイスmd0を構築した.
構築には18時間ほどかかった.
# yum install mdadm # mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
構築したRAIDの設定を保存しておく.
# mdadm --detail --scan >> /etc/mdadm.conf
デバイス/dev/md0をフォーマット・/dataにマウントする.
これで/data/に置いたものはRAID5で保存されることになる.
# mkfs -t ext4 /dev/md0 # vi /etc/fstab /dev/md0 /data ext4 defaults 1 2 # mkdir /data # mount -a
2. Sambaサーバ
2.1 インストール&設定
設定についてはこの記事では省く.
# yum install epel-release # yum install samba4 # vi /etc/samba/smb.conf 色々設定する # systemctl restart smb # systemctl enable smb
2.2 SELinuxの設定
semanageでsambaからのアクセス許可するディレクトリを登録し,restoreconを実行してラベルを設定する.
# semanage fcontext -a -t samba_share_t '/data/Files(/.*)?' # restorecon -R /data/Files
2.3 ファイアウォールの設定
sambaのポートを指定ネットワーク内からのみアクセスできるようにリッチルールを追加
# firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address=XXX.XXX.XXX.XXX/24 port protocol=tcp port=139 accept" # firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address=XXX.XXX.XXX.XXX/24 port protocol=tcp port=445 accept" # firewall-cmd --runtime-to-permanent
3. subversionサーバ
3.1 インストール&設定
# yum install subversion # mkdir /data/svn # svnadmin create /data/svn # vi /data/svn/conf/svnserve.conf # 先頭の'#'を外す anon-access = read auth-access = write password-db = passwd # vi /etc/sysconfig/svnserve # svnserveで利用するリポジトリを設定 OPTIONS="-r /data/svn" # systemctl start svnserve # systemctl enable svnserve
3.2 ファイアウォール設定
# semanage port --list | grep svn svn_port_t tcp 3690 svn_port_t udp 3690
svnのポートはすでにSELinuxには登録されていたので,ファイアウォール設定のみを行う.
sambaと同じく指定ネットワーク内からのみアクセス許可を行う.
# firewall-cmd --zone=public --add-rich-rule="rule family=ipv4 source address=XXX.XXX.XXX.XXX/24 port protocol=tcp port=3690 accept" # firewall-cmd --runtime-to-permanent
ここでsvnサーバにアクセスすると,permission deniedで閲覧することができなかった.
色々試すとSELinuxが悪さをしているようだった.
3.3 SELinux設定
laboradian.com
serverfault.com
上記サイトを参考にした結果,svnserve_content_tがファイルに紐付いていないとsvn_port_tがファイルを読み込めないらしいことがわかった.
下記コマンドを実行するとアクセスできる様になったことを確認した.
svnコンテキストタイプを確認 # semanage fcontext -l | grep svn svnserve_content_tを/data/svn配下に付与(コンテキストタイプのルール付け) # semanage fcontext -a -t svnserve_content_t "/data/svn(/.*)?" chconを使い,実際にコンテキストタイプを紐付ける # chcon -R -h -t svnserve_content_t /data/svn/
4. gitlabサーバ
4.1 インストール
公式に沿って入れていく
about.gitlab.com
# sudo yum install -y curl policycoreutils-python openssh-server # sudo systemctl enable sshd # sudo systemctl start sshd # sudo firewall-cmd --permanent --add-service=http # sudo systemctl reload firewalld # sudo yum install postfix # sudo systemctl enable postfix # sudo systemctl start postfix # curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # yum install -y gitlab-ce
4.2 設定
# vi /etc/gitlab/gitlab.rb # バックアップを保持する期間を1週間に設定 gitlab_rails['backup_keep_time'] = 604800 # RAIDが動いているディレクトリにリポジトリを保存 git_data_dirs({ "default" => { "path" => "/data/gitlab/git-data" }, "alternative" => { "path" => "/data/gitlab/git-data" } }) # タイムゾーンをAsia/Tokyoに変更 gitlab_rails['time_zone'] = 'Asia/Tokyo' # gitlab-ctl reconfigure # gitlab-ctl restart
5. データ移行
/data配下を全コピーすればよいのだが,subversionとgitlabはそれぞれで移行メソッドを持っているので活用する.
5.1 subversionデータ移行
svnsyncを用いて旧サーバとリポジトリを同期する
# vi /data/svn/hooks/pre-revprop-change #!/bin/sh exit 0 # chmod 755 /data/svn/hooks/pre-revprop-change # svnsync init file:///data/svn svn://<old_svn_server_IP> リビジョン 0 の属性をコピーしました (属性 svn:sync-* は飛ばしました)。 # svnsync sync file:///data/svn
svnsyncではユーザ名とパスワードを移行できないので,別途コピーする.
# scp -P 12345 root@<old_svn_server_IP>:/data/svn/conf/passwd /data/svn/conf/passwd
リポジトリごとに固有のUUIDがあり,これが一致していないとコミット時とかにエラーになるらしいので合わせておく.
# svn info svn://<old_svn_server_IP> リポジトリ UUID: <old_svn_server_UUID> # svnadmin setuuid /data/svn <old_svn_server_UUID>
5.2 gitlabデータ移行
旧サーバの/data/gitlab/を/data/
新サーバの/var/opt/gitlab/backups/にコピーし,権限を編集し,gitlab-rakeでリストアする.
# scp -P 12345 root@<old_gitlab_server_IP>:/data/<filename>.tar /var/opt/gitlab/backups/<filename>.tar # chmod 777 /var/opt/gitlab/backups/<filename>.tar # gitlab-rake gitlab:backup:restore # gitlab-ctl restart
5.3 sambaデータ移行
rsyncで同期させる.
# rsync -e "ssh -p 12345 -c arcfour256" -ahv --progress root@<old_samba_server_IP>:/data/ /data
6. 終に
サーバ構築をガッツリとやるいい機会でした.
何かうまく行かないときは大体SELinuxが悪いので,トラブルシューティングがうまくなってきた気がします.
実のところまだsambaのデータコピーが完了しておらず,あと1週間位は掛かりそうな見込みです.(研究室のみんなスマン...)
待っている間に他のサーバーの建て替えも行わなければいけないので,時間を有効に使っていきたいと思います.
また進捗があれば記事を書きたいと思います.