勉強メモ19_VMWare Workstartion 15の中にLinux(CentOS7)を入れて、SVNをインストールし、WindowsやLinux上からコミットとかをしてみる

##0 はじめに

(1)VMWare WorkstartionにLinux(CentOS7)を入れて、
　WindowsにインストールしたSVNや
　Linux(CentOS7)にインストールしたSVNでコミットとかをしてみました。
　（※色々なQiitaの記事をパクって実施）

(2)環境やツールは以下
　  CentOS7、VMWare Workstartion 15、TeraTerm、Windows10、SVN、Apache、WebDAV

(3)色々省略して書いているので、参考程度に！！！
  

##1 まず、VMWare Workstartion15のネットワーク設定をブリッジにしておく
仮想マシン設定の編集リンクをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/042020a9-8fb1-5bf1-7c45-882c7b30a9a9.png)
ネットワークアダプタのネットワーク接続をブリッジに選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/e5863097-e284-3bb5-7c04-ef33968f7e60.png)

##2 VMを起動し、TeraTermを使って、Linux(CentOS7)に接続、事前にhttpdは、インストールして、起動状態にしておく

```shell
#一般ユーザーでログインして、rootに切り替える
[rinchome@localhost ~]$ su - root
#Apacheをインストール
[root@localhost ~]# yum -y install httpd

インストール:
  httpd.x86_64 0:2.4.6-97.el7.centos

依存性関連をインストールしました:
  apr.x86_64 0:1.4.8-7.el7                     apr-util.x86_64 0:1.5.2-6.el7
  httpd-tools.x86_64 0:2.4.6-97.el7.centos     mailcap.noarch 0:2.1.41-2.el7

完了しました!

[root@localhost ~]# systemctl enable httpd
#Apache起動
[root@localhost ~]# systemctl start httpd
```

##2 VMの中でApacheが起動されているのを確認してみる

###(1) ifconfig コマンドでLinux(CentOS7)のIPアドレスを確認(実行後、inet XXX.XXX.XXX.XXXの箇所を確認）

```shell
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX ・・・ 
```

###(2) VMでFireFoxなどのブラウザを開き、上記(1)のIPを入力して以下のURLをアクセス
「http://XXX.XXX.XXX.XXX」
VM上に、以下↓↓の画面が表示されること
※TeraTermではなく、VMでログインし、仮想デスクトップを開き、FireFoxなどを起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/200e2f9c-2c2b-b2d3-caf9-9aa53d495ae7.png)


##3 次にWindows上でChromeなどを開き、Apacheが起動されているのを確認する

###(1)以下のコマンドを実行し、Windowsからアクセスできるようにする

```shell
[root@localhost ~]# firewall-cmd --zone=public --add-service=http
success
```

###(2) WindowsでChromeなどのブラウザを開き、上記2-(1)のifconfigコマンドで確認したIPアドレスを入力して以下のURLをアクセス
「http://XXX.XXX.XXX.XXX」
Windows上に、以下の画面が表示されること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/58bb20d6-d2c1-d60e-4a01-8c0a567da7ec.png)

##4 Linux(CentOS7)にSVNをインストール

```shell
[root@localhost ~]# yum -y install subversion

Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : subversion-libs-1.7.14-16.el7.x86_64                                                                                                                         1/2
  インストール中          : subversion-1.7.14-16.el7.x86_64                                                                                                                              2/2
  検証中                  : subversion-libs-1.7.14-16.el7.x86_64                                                                                                                         1/2
  検証中                  : subversion-1.7.14-16.el7.x86_64                                                                                                                              2/2

インストール:
  subversion.x86_64 0:1.7.14-16.el7

依存性関連をインストールしました:
  subversion-libs.x86_64 0:1.7.14-16.el7

完了しました!
```

###5 リポジトリーを作成する

```shell
[root@localhost ~]# mkdir -p /home/svn/repos/test
[root@localhost ~]# svnadmin create /home/svn/repos/test
```

##6 リポジトリの編成
作成したtestリポジトリ配下にtrunk,branches,tagsディレクトリを作成します。
コミットも発生するので、-m でコミットメッセージも記載します。

```shell
[root@localhost ~]# svn mkdir file:///home/svn/repos/test/trunk -m "create"

Committed revision 1.
[root@localhost ~]# svn mkdir file:///home/svn/repos/test/branches -m "create"

Committed revision 2.
[root@localhost ~]# svn mkdir file:///home/svn/repos/test/tags -m "create"

Committed revision 3.
[root@localhost ~]#
```

##7 mod_dav_svnをインストールする
webDAVを導入し、リポジトリを公開します。
これにより、複数のユーザがapache経由でリポジトリとやりとりをすることができるようになります。

```shell
[root@localhost ~]# yum -y install mod_dav_svn

Running transaction
  インストール中          : mod_dav_svn-1.7.14-16.el7.x86_64                                                                                                                             1/1
  検証中                  : mod_dav_svn-1.7.14-16.el7.x86_64                                                                                                                             1/1

インストール:
  mod_dav_svn.x86_64 0:1.7.14-16.el7

完了しました!

```

##8 リポジトリのパーミッションを変更
Apacheプロセスがリポジトリにアクセスできる様にパーミッションを変更します。

```shell
[root@localhost ~]# chown -R apache:apache /home/svn/repos/
```

##9 subversion.confの設定

subversion設定ファイル(/etc/httpd/conf.d/subversion.conf)に対して設定を行う。

```shell
#viで開く
[root@localhost ~]# vi /etc/httpd/conf.d/subversion.conf
#catで表示している以下の内容を設定！！！
[root@localhost ~]# cat /etc/httpd/conf.d/subversion.conf
<Location /svn/repos>
  DAV svn
  SVNParentPath "/home/svn/repos/"
  SVNListParentPath on
</Location>
[root@localhost ~]#
```
ちなみに各場所でなにを設定しているかというと、

* <**Location /svn/repos**> subversionのRootディレクトリ以下をどのようなＵＲＬで表示させるかを指定します。左記の設定なら、``http://localhost/svn/repos``　となります。 

* **DAV svn** お決まりの文言。

* **SVNParentPath** リポジトリのルートフォルダを指定します。　　　
* **SVNListParentPath on** ブラウザでリポジトリにアクセスした際、リポジトリ配下をリスト表示させるかを指定します。

##10 SELinux用対策
SELinuxが有効(Enforcing)の場合、/home/svn/repos以下に対して、ラベルを付与しアクセス可能となる様にします

```shell
[root@localhost ~]# chcon -R -h -t httpd_sys_content_t /home/svn/repos
#Apache再起動
[root@localhost ~]# systemctl restart httpd
```

##11 WindowsからChromeブラウザ起動して以下URLでアクセスできるか確認する
http://XXX.XXX.XXX.XXX/svn/repos/test/ ※XXX部分は、上記2-(1)のipconfigコマンドで確認したIPアドレス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/25269b12-360e-09be-0ed6-3b7e4acd84b4.png)

##12　Linux(CentOS7)上で(/home/memo)にリポジトリーの内容をチェックアウトしてみる(svn coコマンド利用)

```shell
[root@localhost ~]# mkdir -p /home/memo
[root@localhost ~]# cd /home/memo/
[root@localhost memo]# pwd
/home/memo
[root@localhost memo]# svn co file:///home/svn/repos/test/
A    test/tags
A    test/trunk
A    test/branches
リビジョン 3 をチェックアウトしました。
[root@localhost memo]# ls
test
[root@localhost memo]# cd test/
[root@localhost test]# ls
branches  tags  trunk
```
##13 branchesフォルダーにaaa.txtを追加してコミットしてみる

```shell
[root@localhost test]# pwd
/home/memo/test
[root@localhost test]# ls
branches  tags  trunk
[root@localhost test]# cd branches/
[root@localhost branches]# vi aaa.txt
[root@localhost branches]# cat aaa.txt
aaa
[root@localhost branches]# svn st
?       aaa.txt
[root@localhost branches]# svn add aaa.txt
A         aaa.txt
[root@localhost branches]# svn st
A       aaa.txt
[root@localhost branches]# svn diff
Index: aaa.txt
===================================================================
--- aaa.txt     (リビジョン 0)
+++ aaa.txt     (作業コピー)
@@ -0,0 +1 @@
+aaa
[root@localhost branches]# svn commit -m "aaa.txtコミット"
追加しています              aaa.txt
ファイルのデータを送信しています .
Committed revision 4.
```
##14 13でコミットした内容がWindowsからアクセスして確認できるかテスト

「http://XXX.XXX.XXX.XXX/svn/repos/test/branches/」


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/3eb4a539-25fd-be2d-22e4-579ae08fe4c9.png)

##15 BASIC認証方式の設定
この状態でも複数人による運用は可能ですが、
だれでも参照・更新ができてしまうのでセキュリティの面で大変よろしくありません。
次にユーザ登録とアクセス権限の設定を行います。

ブラウザでリポジトリの確認ができたら、subversion.confの「SVNListParentPath on」より下に設定を追記していきます。

```shell
[root@localhost branches]# vi /etc/httpd/conf.d/subversion.conf
#catで表示している以下の内容を設定！！！
[root@localhost branches]# cat /etc/httpd/conf.d/subversion.conf
<Location /svn/repos>
  DAV svn
  SVNParentPath "/home/svn/repos/"
  SVNListParentPath on
  AuthType Basic
  AuthName "Subversion repository"
  AuthzSVNAccessFile /etc/subversion/conf/authzsvn.conf
  AuthUserFile /etc/subversion/conf/authuser.conf
  Require valid-user
</Location>
[root@localhost branches]#

```
各設定項目の内容は以下の通り。

* **AuthType** 認証タイプ。Basicを指定することによって、Basic認証になります。
* **AuthName** 認証画面に表示される認証名。この値で固定です。
* **AuthzSVNAccessFile** SVNフォルダ（svn/repos配下）のアクセス許可の設定ファイル名
* **AuthUserFile** ユーザ名とパスワードが記載されているファイル名を指定します。
* **Require valid-user** アクセスを許可するユーザを指定。「valid-user」はパスワードファイルに含まれているすべてのユーザに許可することを意味する。

記載の順序は不問のようです

##16 ユーザ作成　
下記のhtpasswdコマンドを実行し、ユーザを追加していきます。
コマンド実行後、パスワードの入力が求められるので
パスワードを決めて、２回パスワードを入力します。

```shell
root@localhost subversion]# cd /etc/subversion/
[root@localhost subversion]# mkdir conf
[root@localhost subversion]# cd conf/
[root@localhost conf]# ls
[root@localhost conf]# touch authuser.conf
#htpasswd /etc/subversion/conf/authuser.conf (ユーザーID)
[root@localhost conf]# htpasswd /etc/subversion/conf/authuser.conf user1
New password:
Re-type new password:
Adding password for user user1
```

##17 ユーザのリポジトリ権限登録
「/etc/subversion/conf/authzsvn.conf」にユーザIDとそれに紐づく権限を記載していきます。
基本的な記載方法は以下の通り。

```shell
 [ディレクトリパス]
 (ユーザーID) = (参照権限)
```
[ディレクトリパス]はSVNParentPath で設定したディレクトリパスより配下のディレクトリのうち、どのディレクトリに対する権限を設定するか記載するところ。
[/]とすると、ルートディレクトリとなり、SVNParentPathに設定したディレクトリパスより下となります。
[/test]とすると、testリポジトリに限定した権限設定となります。

参照権限については、以下の表にまとめました。

| 参照権限   |内容                                                |
|:------|:-----------------------------------------|
|r         |　参照権限を付与                                   |
|w        |　書き込み権限を付与。                        |
|rw       | 参照・書き込み権限を付与。                |
|未記入|　参照・書き込み権限を付与しません。|

例えば、ルートディレクトリ配下に対し、user1に参照・書き込み権限を付与、user2に参照権限を付与、user3に権限を付与しない場合は以下のようになります。

```
[/]
user1=rw
user2=r
user3=
```
では、以下のように作成していきます

```shell
[root@localhost conf]# pwd
/etc/subversion/conf
[root@localhost conf]# ls
authuser.conf
[root@localhost conf]# vi authzsvn.conf
#catで表示している以下の内容を設定！！！
[root@localhost conf]# cat authzsvn.conf
[/]
user1=rw
[root@localhost conf]#
```

##18 設定反映のため、Apacheを再起動する

```shell
[root@localhost conf]# systemctl restart httpd
[root@localhost conf]#
```

##19 WindowsからChromeブラウザ起動して以下URLでアクセスし、Basic認証を聞かれるので、ユーザーID(user1）とパスワードを入力してアクセスできるか確認する
アクセスするURLは以下
http://XXX.XXX.XXX.XXX/svn/repos/test/ ※XXX部分は、上記2-(1)のifconfigコマンドで確認したIPアドレス

(1)アクセスすると、Basic認証の画面が出る↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/7d421f65-e476-fb1a-60aa-2137140afce9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/fb907ca8-1c9d-9efd-1287-d73010b65199.png)

(2)ID(user1)とパスワードを入力してログインする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/c2d49d71-dca7-eabb-b20c-7583b1da76b9.png)

(3)アクセスできることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/7cf3a86a-bc61-d65f-d6c5-084fb17da878.png)

##20 次にWindowsからチェックアウトをして、コミットを行う↓↓

##21 まず、WindowsにSVNをインストールし、チェックアウトをする

(1)以下にアクセスしてSVNのmsiファイルをダウンロード
https://ja.osdn.net/projects/tortoisesvn/

(2)上記、アクセスし、今回は下記のファイルをダウンロード、ダウンロードしたらクリックしてインストール　※クリックだけひたすらする、特別な設定は今回なにもしていない。
TortoiseSVN-1.14.1.29085-x64-ipv6-svn-1.14.1.msi

(3)事前にLinux(CentOS)上に以下のコマンドを実行する
リポジトリ内のdavとdbフォルダ以下のオーナーをapacheに変更しないといけない
subversionのバージョンが1.5以降になるとdavディレクトリは自分で作らないといけないらしいので要注意。

```shell
[root@localhost test]# pwd
/home/svn/repos/test
[root@localhost test]# ll
合計 8
-rw-r--r--. 1 apache apache 229  3月 22 16:36 README.txt
drwxr-xr-x. 2 apache apache  54  3月 22 16:36 conf
drwxr-sr-x. 6 apache apache 253  3月 22 17:06 db
-r--r--r--. 1 apache apache   2  3月 22 16:36 format
drwxr-xr-x. 2 apache apache 231  3月 22 16:36 hooks
drwxr-xr-x. 2 apache apache  41  3月 22 16:36 locks
[root@localhost test]# mkdir dav/
[root@localhost test]# ll
合計 8
-rw-r--r--. 1 apache apache 229  3月 22 16:36 README.txt
drwxr-xr-x. 2 apache apache  54  3月 22 16:36 conf
drwxr-xr-x. 2 root   root     6  3月 22 17:47 dav
drwxr-sr-x. 6 apache apache 253  3月 22 17:06 db
-r--r--r--. 1 apache apache   2  3月 22 16:36 format
drwxr-xr-x. 2 apache apache 231  3月 22 16:36 hooks
drwxr-xr-x. 2 apache apache  41  3月 22 16:36 locks
[root@localhost test]# chown apache:apache -R db/ dav/
[root@localhost test]# ll
合計 8
-rw-r--r--. 1 apache apache 229  3月 22 16:36 README.txt
drwxr-xr-x. 2 apache apache  54  3月 22 16:36 conf
drwxr-xr-x. 2 apache apache   6  3月 22 17:47 dav
drwxr-sr-x. 6 apache apache 253  3月 22 17:06 db
-r--r--r--. 1 apache apache   2  3月 22 16:36 format
drwxr-xr-x. 2 apache apache 231  3月 22 16:36 hooks
drwxr-xr-x. 2 apache apache  41  3月 22 16:36 locks
[root@localhost test]#
```
Windowsでのコミット実施時に「could not begin a transaction」エラーがでるので、
一旦、Linux(CentOS7)で以下のコマンドを打ち込む。

```shell
[root@localhost test]# setenforce 0
[root@localhost test]#
```
上記は、一旦、暫定対応として、SELinuxの設定がどうとかが原因らしいので。

##22 21のSVNインストールやその他の設定が終わったら、Windowsからチェックアウトを行う

### (1)WindowのデスクトップにTESTフォルダー作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/76e080b8-52d1-ebf7-6e70-60fc77b9f37c.png)
### (2)TESTフォルダーを右クリックし、Linux(CentOS7)で作成したリポジトリーをチェックアウト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/58caa054-b61f-e9a3-60ec-e08fc4473a24.png)
以下、リポジトリーのURL入力してOKする　※XXX部分は2-(1)のifconfigコマンドで確認したIPアドレス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/ee4bdc08-45f9-f384-631c-5abfde4e66e2.png)
Basic認証で入力したユーザーID（user1）とパスワードを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/424fce5d-3e6a-4089-2faa-3343074e5407.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/b51cfd76-9cbc-59cf-6054-0b31073dfbd3.png)
### (3)TESTフォルダーの中にLinuxで作成したリポジトリーがチェックアウトできていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/b65c734c-65d6-e477-28a4-3d90486d4d72.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/63c8665c-ff1e-8d49-3d7f-c4498d7f431d.png)

##23 aaa.txtを編集してコミットしてみる

###(1)branchesフォルダーの「aaa.txt」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/5b68cf41-2b87-17d9-4725-ff330a6026da.png)
###(2)「aaa.txt」を編集
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/371a8afa-ec91-b69c-06be-43b909dbe1bc.png)
###(3)「aaa.txt」を編集確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/307d10f1-cdad-97a3-88d9-4fd08e66d8bd.png)
###(4)「aaa.txt」をコミットしてみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/d49b4bae-c033-6c3a-72da-759a54b37bd4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/d883b493-b39f-ac83-d394-7ad4bc0f9043.png)
###(5)コミット確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/e68058c2-cf08-35c4-96cb-7d52beb0b09c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730323/7f169948-0bd3-73d5-6035-98fc322053ed.png)
###(6)Linux(CentOS7)仮想サーバー上でSVN更新して反映できているか確認する

```shell
[root@localhost test]# cd /home/memo/test/
[root@localhost test]# ls
branches  tags  trunk
[root@localhost test]# cd branches/
[root@localhost branches]# ls
aaa.txt
[root@localhost branches]# cat aaa.txt
aaa
[root@localhost branches]# svn up aaa.txt
Updating 'aaa.txt':
U    aaa.txt
リビジョン 5 に更新しました。
[root@localhost branches]# cat aaa.txt
aaa
rinchome?
想root@localhost branches]#
[root@localhost branches]#
#下記で反映されているのを確認↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
[root@localhost branches]# cat aaa.txt
aaa
rinchome追加
[root@localhost branches]#
```

##24 一旦、終了