File: cvsupd.8

package info (click to toggle)
manpages-ja 0.5.0.0.20180315%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 28,516 kB
  • sloc: perl: 161; makefile: 101
file content (1055 lines) | stat: -rw-r--r-- 42,982 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
.\" Copyright 1996, 1997, 1998, 1999 John D. Polstra.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgment:
.\"      This product includes software developed by John D. Polstra.
.\" 4. The name of the author may not be used to endorse or promote products
.\"    derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $Id: cvsupd.8,v 1.34 1999/12/10 05:31:36 jdp Exp $
.\"
.\" Originally translated
.\"         by Issei Suzuki <issei@issei.org>
.\" Updated Sun Jan 23 03:13:03 JST 2000 to match cvsupd.8 included in cvsup-16.1
.\"         by FUJIWARA Teruyoshi <fujiwara@linux.or.jp>
.\"
.\" WORD: access file	アクセス制御ファイル
.\"
.Dd August 31, 1999
.Os FreeBSD
.Dt CVSUPD 8
.Sh 名称
.Nm cvsupd
.Nd ネットワーク上で CVS レポジトリを配布するためのサーバ
.Sh 書式
.Nm
.Op Fl ev
.Op Fl A Ar addr
.Op Fl b Ar base
.Op Fl c Ar collPath
.Op Fl C Ar maxClients
.Op Fl l Ar log
.Op Fl p Ar port
.Op Fl P Ar range
.Op Fl s Ar scanDir
.Op Fl Z Ar comprLevel
.Sh 解説
.Nm
はネットワーク配布のためのパッケージである
.Nm CVSup
のサーバプログラムです。
サーバと組み合わせて動作するクライアントプログラム
に関しては
.Xr cvsup 1
を参照してください。
.Pp
通常使用時には
.Nm
.Ql Fl C Ar maxClients
オプションを指定して実行しなければなりません。
.Nm
はバッググラウンドデーモンとして実行され、
リモートクライアントからの接続要求に対応します。それぞれの接続について
.Nm
は子プロセスを fork し、クライアントが要求したファイルを送ります。
.Pp
以下のオプションがサポートされています:
.Bl -tag -width Fl
.It Fl A Ar addr
サーバが接続を受け付ける(accept)するローカルのアドレス(IP アドレス
またはホスト名)を指定します。このオプションは複数個の IP アドレスを持つ
ホストで役立つでしょう。
.It Fl b Ar base
.Ar base
を設定ファイルの起点ディレクトリとして使います。
デフォルト値は
.Pa /usr/local/etc/cvsup
です。
.It Fl c Ar collPath
提供されるコレクションに関する情報を得るために、指定されたディレクトリを
検索します。
.Ar collPath
は 1 つのディレクトリ、もしくはコロンで区切った複数のディレクトリを
含みます。
絶対パスで指定されていない場合は、起点ディレクトリからの相対パスと解釈
されます。
デフォルトの検索パスは
.Ql sup
です。
.It Fl C Ar maxClients
同時に接続できるクライアントの数を
.Ar maxClients
に制限します。
指定した最大数を超えた場合、クライアントはサービスを丁寧に
断わられます。
.Pp
このオプションが指定されていない場合、
.Nm
はフォアグラウンドで動作して 1 クライアントに対してのみサービスを行い、
それが終わると終了します。
.It Fl e
デーモンモードで動作している場合に、標準出力と標準エラー出力への
メッセージのリダイレクトを抑制し、syslog を用いてログを記録します。
このオプションを設定しない場合、標準出力と標準エラー出力は
.Pa /dev/null
にリダイレクトされます。
このオプションは、サーバのクラッシュのような滅多にないパニックの際の
メッセージを押さえるのに役立ちます。
こういったメッセージはデバッグに非常に有用ですが、それらを syslog に送
るための確実な方法がないためです。
このオプションのお勧めの使い方は次のようなものです:
.Dl cvsupd -e ... >>/var/tmp/cvsupd.out 2>&1
ただし、このコマンドラインでは
.Xr sh 1
の表記を使っています。
.It Fl l Ar log
ログメッセージを
.Ar log
に書き出します。
.Ar log
.Cm @ Ns Ar facility
(例 
.Ql @local0 )
のような形式で指定された場合、ロギングは指定された facility を使い
syslog 経由で行われます。
そうでない場合、
.Ar log
はログファイルの名前として扱われます。
そのファイルがすでに存在している場合には、新しいメッセージはファイルの最
後に追加されます。
.Pp
サービスを受ける各クライアントについて、少なくとも 2 つのメッセージが
記録されます。最初のメッセージはユーザ名とホスト名でクライアントを
識別します。最後のメッセージは更新の成功・失敗と、合計のネットワーク I/O 
の量をキロバイト単位(1K = 1024)で報告します。エラーやその他の知らせる
べき状態を知らせるために、この 2 つ以外のメッセージが送られることがあ
ります。
.\" FIXME - default
.It Fl p Ar port
サーバが接続を待ち受ける(listen する) TCP ポートを指定します。
デフォルト値は 5999 です。
パッシブモードでない場合には、サーバからクライアントに向かって張る 2
番目の接続(データ接続と呼ばれます)のために、サーバはこれより 1 つ小さ
い番号のポートも使います。
.It Fl P Ar range
パッシブモードの時にデータ接続に使うサーバ側の TCP ポートの範囲を指定
します。
.Ar 範囲
は単一の整数もしくは
.Ql lo-hi
の範囲のどちらかの形で指定できます。
.It Fl s Ar scanDir
ミラーモードを有効にし、scan ファイルがあるディレクトリを指定します。
.Ar scanDir
が絶対パスで指定されていなければ、これは起点ディレクトリからの相対パス
と解釈されます。後述の
.Sx CVSup を使ったミラーサイトの運用
をご覧ください。
.It Fl v
バージョン番号を表示して終了します。クライアントには何も提供しません。
.It Fl Z Ar comprLevel
圧縮レベルを
.Ar comprLevel
に設定します。
圧縮レベルは 0 から 9 の間で指定します。
レベル 0 では圧縮は行われず、9 で圧縮率が最大となります。
デフォルトの圧縮レベルは 1 です。
これよりも高い圧縮レベルを使っても、CPU パワーが大幅に消費される割には
ファイルサイズはほとんど改善されません。
.El
.Sh ファイルコレクションレポジトリを準備する
.Nm
がクライアントに提供するファイルコレクションは、様々な設定ファイルで記述
します。
設定ファイルは
.Sm off
.Ar base / Ar colldir
.Sm on
ディレクトリ下に置きます。ここで
.Ar base
.Fl b Ar base
コマンドラインオプションで指定されたもの、もしくはデフォルト値の
.Pa /usr/local/etc/cvsup
です。
.Ar collDir
.Fl c
オプションで指定されたディレクトリのいずれか、もしくはデフォルト値の
.Ql sup
です。
.Pp
各コレクションの設定ファイルは、
.Sm off
.Ar base / Ar collDir
.Sm on
下に作ったコレクション名と同名のサブディレクトリに個別に置かれます。
例えば
.Ql src-base
コレクションの設定ファイルは
.Sm off
.Ar base / Ar collDir Pa /src-base
.Sm on
に置かれます。
コレクションのサブディレクトリ中には、
.Pa releases
ファイルとリストファイルが置かれます。
.Pa releases
ファイルはリリースごとに一行の記述を含みます。
各行の最初の語はリリース名です。例えば
.Ql cvs
となります。
その後には、順不同で以下のようなフレーズが続きます:
.Bl -tag -width Fl
.It Cm list= Ns Ar file
リストファイルの名前を、コレクションのサブディレクトリに対する相対パス
で指定します。リストファイルについては後ほど説明します。
.It Cm prefix= Ns Ar directory
コレクションを構成するファイルのある場所を指定します。
もし
.Ar directory
が絶対パスでなければ、起点ディレクトリ
.Ar base
からの相対パスと見なされます。
.Cm prefix
が指定されていない場合のデフォルト値は
.Ar base
です。
.It Cm keywordprefix= Ns Ar directory
.Dq 仮想プレフィックス
を指定します。これは RCS のキーワードである
.Ql $\&Header$
.Ql $\&Source$
を絶対パスに展開するためにのみ用いられます。
普通は、
.Ar direcotry
はマスターの CVS レポジトリを持っているマシンにおける、その
CVS レポジトリの絶対パスです。
.Cm keywordprefix
を用いると、
.Nm CVSup
は必ず、
実際のレポジトリの位置によらず全てのマシン上で RCS 
キーワードを同一の形に展開します。
.It Cm super= Ns Ar collection
現在のコレクションの直接のスーパーコレクションを指定します。
配布物が大きな場合には、コレクションに階層を持たせてまとめることがよく
あります。最も上の階層は、配布されている全てのファイルを含む
コレクションです。次の階層はいくつかのサブコレクションからなり、それぞ
れは全体のファイルの部分集合となります。
各サブコレクションは自分の下にサブコレクションを持てますし、それ以降も
同様です。
.Cm super
キーワードは、こういった階層的な配置において、そのコレクションの
親コレクションを指定します。
.Pp
このキーワードは省略してもかまいません。省略された場合には、
.Nm
は現在のコレクションと利用可能な他のコレクションの間に
何の関連もないとみなします。
.Pp
.Cm super
キーワードから得た情報は、サーバがミラーサイトとして動作している時に、
適切な scan ファイルを見つけるために使われます。
.Sx CVSup を使ったミラーサイトの運用
をご覧ください。
.It Cm nocheckrcs
更新される RCS ファイル群について、MD5 チェックサムの比較を行いません。
RCS ファイルにおけるチェックサムの不一致は意味を持ちません。なぜなら、
ある論理的な意味を持った RCS ファイルには、テキストとしての表現はたく
さんあるからです。
.It Cm norcs
RCS ファイルを特別扱いしません。RCS ファイルを他のファイルと同様に扱い
ます。
.It Cm norsync
.Em rsync
アルゴリズムを使わないようにします。
.Sy 注意:
このキーワードを
.Pa releases
ファイルで使うのは古いやり方です。これを使わないでリストファイル内で
.Cm norsync
または
.Cm rnorsync
を使ってください(後述)。
.El
.Pp
認識できないキーワードは受け付けられますが、無視されます。
これは
.Xr sup 1
パッケージとの後方互換性のためです。
.Nm
が提供するリリースが 1 つだけであっても、
.Pa releases
ファイルは必要であることを覚えておいてください。
.Pp
リストファイルは、クライアントのコレクションのバージョンを更新する方法
を詳しく指定します。
各行には 1 つだけコマンドが書かれます。空行と
.Ql #
から始まる行は無視されます。
指定される全てのファイル名は
.Pa releases
内で指定されている
.Cm prefix
ディレクトリからの相対パスとして扱われます。
.Pp
リストファイルのコマンドの多くは、ファイル名のパターンを引数として
受け付けます。
このパターンは
.Xr sh 1
が受け付けるパターンに似ており、
.Ql * ,
.Ql ? ,
.Ql [...]
を組み合わせたワイルドカードが使えます。
.Cm omitany
パターンだけは例外ですが、その他の場合には、ファイル名に含まれる
スラッシュ文字は、パターン中のスラッシュ文字とだけマッチします。
例えば
.Ql *
.Ql .prifole
というファイル名にマッチします。
.Bl -tag -width Fl
.It Cm upgrade Ar pattern ...
与えられたパターンのいずれかにマッチした、すべてのファイルとディレクトリ
が更新ド対象のリストに含められます。
ディレクトリ名がマッチした場合、その中にある全てのファイルと
サブディレクトリが再帰的に含まれます。
.It Cm always Ar pattern ...
このコマンドは、全ての
.Cm omitany
コマンドを上書きすることを除いて、
.Cm upgrade
コマンドと同一です。
.It Cm omitany Ar pattern ...
与えられたパターンのいずれかにマッチした、すべてのファイルとディレクトリ
は更新対象のリストから除外されます。
ディレクトリ名がマッチした場合、その中にある全てのファイルと
サブディレクトリが除外されます。
.Pp
.Cm omitany
に対するパターンの解釈は他のパターンと異なります。
一般のパターンでは、パス名に含まれるスラッシュ文字はパターン中の
スラッシュ文字にのみマッチしますが、
.Cm omitany
に与えるパターンでは、スラッシュ文字は他の文字と同じように扱われます。
したがって、
.Ql *.c
.Ql \&.c
で終わるすべてのパス名にマッチします。例えば
.Ql foo/bar/lam.c
も含まれます。
.It Cm symlink Ar pattern ...
与えられたパターンのいずれかにマッチしたシンボリックリンクは、その
シンボリックリンクが指すファイルとしてではなく、シンボリックリンクとし
てアップグレードされます。
この指定がない場合、シンボリックリンクのリンク先が参照され、リンクが指
すファイルがクライアントに送られます。
.It Cm rsymlink Ar pattern ...
このコマンドは
.Cm symlink
に似ていますが、もしディレクトリがマッチした場合、そのディレクトリ
ツリー以下のすべてのシンボリックリンクもマッチしたものとして扱われます。
.It Cm norsync Ar pattern ...
与えられたパターンのいずれかにマッチしたファイルの更新において、rsync 
アルゴリズムが使われません。この指定はログファイルで役立ちます。
というのも、
.Nm
.Dq append
最適化の方が rsync アルゴリズムよりも効率的だからです。
.It Cm rnorsync Ar pattern ...
このコマンドは
.Cm norsync
に似ていますが、もしディレクトリがマッチした場合、そのディレクトリ
ツリー以下の全てのファイルがマッチしたものとして扱われます。
.It Cm execute Ar command Pq Ar pattern ...
.Ar pattern
の 1 つにマッチするファイルの更新が成功したときに、指定された
.Ar command
がクライアントによって実行されます。
.Ar command
は、最初の
.Ql (
までの全ての語からなります。
.Ql %s
という文字列はすべて、クライアントホストで更新されたファイルのパス名に
置き換えられます。
存在する
.Ql %%
はすべて
.Ql %
に置き換えられます。
コマンドは文字列を
.Pa /bin/sh
に渡すことで実行されます。
.Pp
空白文字で区切って複数のパターンを指定することができます。
それらのファイルは
.Cm prefix
ディレクトリからの相対パスとして解釈されます。
それぞれのパターンは、ファイルが
.Em server
上に存在する場合でも適切なファイルにマッチするように記述しなければなり
ません。
例えば RCS ファイル名の
.Ql ,v
サフィックスは、たとえチェックアウトモードの結果としてクライアント上にそ
のサフィックスが存在しない場合でもマッチしなければなりません。
ファイル名に含まれるスラッシュ文字は、パターン中のスラッシュと正確に一
致しなければなりません。
CVS の
.Ql Attic
ディレクトリはマッチングの処理に暗黙的に含まれるで、パターン中で直接指
定してはいけません。
マッチするファイルは、それが Attic かどうかに関わらず発見されます。
.Pp
.Cm execute
文がディレクトリにマッチした場合、コマンドが実行されるのは、
ディレクトリが新規に作成されたとき、またはディレクトリの属性が変更され
たときです。
コマンドはディレクトリから上ったとき、つまりそのディレクトリ内の
ファイルとサブディレクトリの処理が終わった後に実行されます。
.Pp
複数の
.Cm execute
文が 1 つのファイルにマッチした場合、全ての関係するコマンドが順に実行
されます。
.Pp
セキュリティ上の理由で、クライアントは全ての
.Cm execute
文を無視するかもしれません。
.El
.Pp
認識できないコマンドは受け付けられますが、無視されます。これは
.Xr sup 1
との後方互換性のための動作です。
.Sh CVSup によるミラーサイトの運営
ミラーサイトとは、
.Nm CVSup 
を用いてマスターのサイトからファイルの取得と更新を行い、
.Nm CVSup
経由で他のサイトにファイルを再配布するサーバのことです。ミラーサイトは、
大きなプロジェクトで負荷を複数のサーバに分散するためによく使われます。
配布されるファイルは元々はマスターサイトに置かれます。各ミラーサイトは
マスターサイトを基にして、自分が持っているコピーを定期的に更新します。
次に、クライアントはミラーサイトのどれかから更新分のファイルを取得しま
す。
.Pp
.Nm
には、ミラーサイトの効率を劇的に向上させるための特殊な動作モードがあり
ます。このモードはコマンドラインで
.Fl s Ar scanDir
オプションを指定すると有効になります。
.Fl s
オプションを指定しないと、
.Nm
は要求された各コレクションのファイルに対してファイルツリー全体を調
べて、全てのファイルについて
.Xr stat 2
システムコールを実行します。この動作は接続した全てのクライアントに対し
て行われます。どのファイルがいつ変更されるか分からないからです。このよ
うな調べ方をするとファイルを持っているディスクに対してシークの負荷が大
きくかかり、同時にサービスを受けられるクライアントの数が制限されること
になります。
.Pp
ミラーサイトの場合には、コレクション内のファイルが更新されるのは新しい
バージョンを
.Nm CVSup
経由で受け取る時だけであることが分かっています。
.Fl s
オプションを使うと、
.Nm
はこの性質を生かして、ファイルツリーの調査を全く行わずにすみます。
そのため、サーバのディスク負荷は大幅に削減されます。ファイルツリーを調
べる代わりに、
.Nm
はコレクション内のファイルに関する必要な情報を
.Em scan
ファイルを読むことによって取得します。scan ファイルは、
.Nm cvsup
クラアイントがミラーサイト上のファイルをマスターサイトにあるオリジナル
のデータを使って更新する際に、クライアントが作成します。
.Xr CVSUP 1
では、これらのファイルは
.Em list
と書かれています。どちらの呼び方でも同じファイルを指しています。
.Nm
はクライアントにサービスする際は毎回、最後のマスターサイトからの更新の
ときに生成された scan ファイルを見つけます。したがって、サーバは
コレクション内にあるファイルに関する最新の情報を常に持っており、
ファイルツリーを調べる必要はありません。
.Pp
.Fl s
オプションの後には、scan ファイルがあるディレクトリ名を指定します。こ
れは普通、起点ディレクトリのサブディレクトリであり、
.Nm cvsup
クライアントがリストファイルを管理している場所と一致していなければなり
ません。デフォルトでは、
.Nm cvsup
は起点ディレクトリのサブディレクトリである
.Pa sup
にこれらのファイルを置きます。これに合わせるには、
.Nm
.Ql -s sup
で実行しなければなりません。
.Fl c
オプションによって
.Nm cvsup
のリストファイルの位置がデフォルト値から変更されている場合、
.Nm Ns
の scan ディレクトリも同じように変更しなければなりません。
.Fl s
オプションにはデフォルト値はありません。コマンドラインで明示的に指定し
ていなければ、scan ファイルは全く使われません。
.Pp
全てのコレクションに対して scan ファイルが存在する必要はありません。
.Nm
はまずクライアントが要求したコレクションについて scan ファイルを探しま
す。その scan ファイルが存在しなければ、
.Nm
は順にスーパーコレクションの scan ファイルを探していき、最初に見つかっ
た scan ファイルを使います。
(詳しくは
.Sx ファイルコレクションレポジトリを準備する
で説明されている
.Cm super
キーワードの説明を参照してください。)
適切な scan ファイルがなければ、
.Nm
は最終的にファイルツリーを全て調べます。
.Sh アクセス制御
デフォルトの動作ではサーバへのアクセスは制限されていませんが、接続する
クライアントの IP アドレスに基づくかなり柔軟な機構があります。この機構は
アクセス制御ファイル
.Ar base Ns Pa /cvsupd.access
に規則を書くことによって有効になります。アクセス制御ファイルは
テキストファイルであり、1 行に 1 つの規則が書かれます。コメントは
.Ql #
で始まり、その行の最後まで続きます。空白文字は無視されますが、隣り合う
トークンを区切る場合は除きます。空行は無視されます。
.Pp
それぞれの規則は以下の要素からなります:
.Bl -bullet
.It
規則が
.Em 許可(permit)
規則、
.Em 認証(authenticate)
規則、
.Em 拒否(deny)
規則のいずれであるかを示すフラグ。このフラグは 1 つの文字で表されます:
.Ql +
は許可規則、
.Ql *
は認証規則、
.Ql -
は拒否規則を表します。
.It
クライアントの IP アドレスと比較され、そのクライアントに規則を適用する
かどうかが決めるための IP アドレス。これは数値の IP アドレスでも
ホスト名でも記述できます。数値のアドレスは、ドットで区切った 1 個から 
4 個のオクテットで表します。指定したオクテットが 4 個より少ない場合は、
後ろのオクテットが 0 であるとして扱われます。
.Pp
ホスト名は読み込まれる時に数値アドレスに変換されます。
ホストが複数個のアドレスを持っている場合、それぞれのアドレスに対する
規則が個別に追加されます。これは望み通りの動作をするかもしれませんし、
そうでないかもしれません。
.Pp
ホスト名は注意して使うべきです。解決に時間がかかる名前があると、
サーバの動作が著しく遅くなるからです。
.It
アドレスを比較する前に規則とクライアントの IP アドレスとの AND を取る
ための
.Em matching
マスク。このマスクは、
マスクの上位ビットにある 1 の個数を
.Ql /
の後に書いて指定します。例えば、
.Ql /24
は 0xffffff00 というマスクを示します。
.Em matching
マスクは省略してもかまいません。省略した場合のデフォルト値は
.Ql /32
です。
.It
規則にマッチしたクライアントを数える方法(後述)を決める
.Em counting
マスク。
指定方法は
.Em matching
マスクと同じです。
.Em counting
マスクは省略してもかまいません。省略した場合はデフォルト値として、
.Em matching
マスクと同じ値を持ちます。
.It
同時にマッチできるクライアントの最大数を指定する
.Em limit
値。これは 10 進の整数で指定し、前の要素と区別するために空白を前に
置きます。
.Em limit
は省略してもかまいません。省略した場合のデフォルト値は、
.Em 拒否
規則については 0 であり、
.Em 許可
規則については無制限です。
.El
.Pp
クライアントがサーバに接続した際、クライアントの IP アドレスは
規則に対して順番にチェックされていきます。
それぞれの規則は以下のように処理されます:
.Bl -enum
.It
規則の IP アドレスとクライアントの IP アドレスを比較します。
比較の前にはそれぞれのアドレスと
.Em matching
マスクとの AND を取っておきます。
アドレスがマッチしなければ、この規則は無視されます。
.It
現在接続している他の全てのクライアントの IP アドレスと
接続しようとしているクライアントの IP アドレスを比較します。
比較の前には各アドレスと
.Em counting
マスクとの AND を取っておきます。マッチしているクライアントの数
(接続しようとしているクライアントは数えません)が
.Em limit
より小さければ規則は
.Em 成功
となります。
そうでなければ規則は
.Em 失敗
します。
.It
規則が
.Em 許可
規則であり、かつ成功であれば、クライアントの接続が許可され、残りの規則
は無視されます。
.It
規則が
.Em 認証
規則であり、かつ成功であれば、サーバはクライアントが何者であるかを確認
しようとします。確認には challenge-response プロトコルを用います(後述の
.Sx 認証
の節を見てください)。
アクセスが許可されるか拒否されるかは認証の結果によって決まります。
残りの規則は無視されます。
.It
規則が
.Em 拒否
規則であり、かつ失敗であれば、クライアントはアクセスを拒否され、残りの
規則は無視されます。
.It
これ以外の場合には、次の規則について処理が継続されます。
.El
.Pp
リストの最後には、どんな IP アドレスにもマッチする
.Em 認証
規則が暗黙的に置かれています。したがって、アクセスが許可も拒否もされず
に処理が終わった場合は、アクセスは認証機構によって制御されます。
.Pp
規則の一般的な使用方法の例を以下に示します。
.Pp
.Dl -spam.cyberpromo.com
特定のホストからのアクセスを全て拒否します。
.Pp
.Dl +mirror.FreeBSD.org
特定のホストからのアクセスを無制限に許可します。
.Pp
.Dl -user.FreeBSD.org 1
特定のホストからの同時接続を 1 つだけに制限します。
.Pp
.Dl -198.211.214/24
特定のクラス C アドレスのホストからのアクセスを拒否します。
.Pp
.Dl -198.211.214/24 3
特定のクラス C アドレスのホストからの同時アクセスを、
合計 3 つまで許可します。
.Pp
.Dl -198.211.214/24/32 3
特定のクラス C アドレスに含まれるホストからの同時アクセスを、
ホストごとに合計 3 つまで許可します。
.Pp
上記 2 つの例の違いに注意してください。
前者の例はネットワークごとの制限を行い、後者の例はホスト単位の制限を行っ
ています。両者の相違点は
.Em counting
マスクです。最初の例はマスクが 24 ビットなので、指定したアドレスブロッ
クに含まれる全てのホストについて共通のカウンタが作られます。後者の例は
マスクが 32 ビットなので、ホストごとに別々のカウンタが作られます。
.Pp
.Dl -0.0.0/0/24 1
各アドレスブロック(アドレス 256 個)からの同時接続をそれぞれ 1 つだけ
許可します。
.Pp
.Dl *0.0.0.0/0
全てのクライアントについて、認証を行ってアクセスを許可するかどうかを決
めます。
.Pp
アクセス制御ファイルを更新する際にサーバを止める必要はありません。
しかし、編集の際にはコピーを取って別の場所で編集し、それからアトミック
に新しいファイルに置き換えるべきです。ファイルを更新した後にサーバに
シグナルを送る必要はありません。サーバはファイルが触られたことを
検出し、再読み込みを自動的に行います。
さらに、サーバは 3 時間ごとにファイルを再読み込みします。
これは DNS の変更で解決されるホスト名が変わるかもしれないので、これに
対応するためです。
.Pp
個々の規則における文法違反はログに記録され、違反している規則は無視され
ます。ホスト名解決の失敗もログに記録されます。
.Sh 認証
.Nm CVSup
はサーバへのアクセスの制御に使える認証機構を備えています。この認証機構
はパケットの盗聴攻撃や再生攻撃の影響を受けない challenge-response 
プロトコルを使っています。ネットワーク上ではどちらの方向にもパスワード
は流れません。クライアントとサーバはどちらとも、相手が何者であるかを
独立して確認できます。
.Pp
クライアントの認証は
.Ar base Ns Pa /cvsupd.access
ファイル内の
.Em 認証
規則が成功するか、
.Dq 規則が適用されないままファイル末尾まで来た
場合に呼び出されます。
.Pa cvsupd.access
が存在しない場合はクライアントの認証は行われません。
.Pp
.Ar base Ns Pa /cvsupd.passwd
ファイルには認証時に使う情報が入っています。このファイルには、
サーバへのアクセスが許可されたクライアントについてのレコードが書かれて
います。ファイル中では 1 行に 1 レコードが書かれます。
.Ql #
で始まる行と、空白文字しか含まない行は無視されます。
ファイル中の別の場所では空白文字は必ず意味を持ちます。フィールドは
.Ql \&:
文字で区切ります。
.Pp
ファイルの最初のレコードは特別です。最初のレコードはサーバ自身を表しま
す。サーバのレコードは以下の形式になります:
.Pp
.Dl Ar serverName Ns No : Ns Ar privateKey
.Pp
.Ar ServerName
はサーバのカノニカル名です(例:
.Ql CVSup.FreeBSD.ORG
)。
この名前がクライアントに送られ、クライアントはこの名前を使って適切なク
ライアント名と、認証のために共有している秘密の文字列を選びます。
この名前では大文字と小文字は区別されません。
.Pp
.Ar PrivateKey
.Ql \&:
を除く任意の文字からなる文字列です。
サーバがランダムな challenge 文字列を生成してクライアントに送った時、
サーバは推測が困難な challenge 文字列を
.Ar privateKey
を使って作ります。challenge 文字列はランダムであり、まず予測できないの
で、
.Ar privateKey
は実はあまり重要ではありません。そうしたければ空のままでもかまいません
が、文字列の前の
.Ql \&:
は必ず必要です。
.Pp
ファイル中の残り全てのレコードは、個々のクライアントに対応します。
クライアント用のレコードは以下の形となります:
.Bd -literal -offset indent
.Sm off
.Xo Ar clientName No : Ar sharedSecret No :
.Ar class No : Ar comment
.Xc
.Sm on
.Ed
.Pp
空のフィールドがある場合でも、全てのフィールドが存在しなければなりません。
.Ar ClientName
はレコードが適用されるクライアントの名前です。慣習では、全ての
クライアント名には e-mail アドレスが使われます(例: 
.Ql BillyJoe@FreeBSD.ORG
)。
クライアント名では大文字と小文字は区別されません。
.Pp
.Ar SharedSecret
は、クライアントとサーバだけが知っている秘密の文字列です。
この文字列はクライアントが選んだパスワードから
.Nm cvpasswd
ユーティリティを使って生成されます。
クライアントは
.Ar sharedSecret
を知っていることを示すことにより、自分の身分をサーバに対して証明します
(その逆も同じです)。
.Ar sharedSecret
フィールドを
.Ql *
にすることにより、クライアントのアクセスを禁止できます。
.Pp
共有している秘密の文字列がネットワーク上を流れることはありませんし、
秘密の文字列からクライアントのパスワードを調べることもできません。しか
し、共有している秘密の文字列があれば、改造した
.Nm cvsup
を使ってクライアントのふりをすることができるかもしれません。したがって、
.Pa cvsupd.passwd
必ずファイルはサーバしか読めないように注意してください。
.Pp
.Ar Class
は将来使うために予約しています。空にしてください。
.Pp
.Ar Comment
はサーバの管理者が便利なように、クライアントに関する備考が書かれていま
す。例えば、クライアントの本名や、別の連絡手段などです。
.Pp
.Pa cvsupd.passwd
ファイルを更新する際にサーバを止める必要はありません。
しかし、編集の際にはコピーを取って別の場所で編集し、それからアトミック
に新しいファイルに置き換えるべきです。ファイルを更新した後にサーバに
シグナルを送る必要はありません。
.Pp
.Pa cvsupd.passwd
ファイル中では、個々のレコードの文法違反はログに記録され、違反している
レコードは無視されます。
.\" ---------------------------------------
.Sh アクセス制御と認証通信の方法
アクセス制御と認証機構の関係を以下にまとめます。重要な原則は、アクセス
制御が先に行われる点です。アクセス制御の結果によって認証が行われるかど
うかが決まります。
.Bl -enum
.It
.Pa cvsupd.access
ファイルがなければ、全てのクライアントのアクセスが許可されます。たとえ
.Pa cvsupd.passwd
があっても認証は行われません。
.It
.Pa cvsupd.access
ファイルが存在するけれど、空である場合、全てのクライアントに対して認証
が行われます。
.Pa cvsupd.passwd
が存在しなければ、誰もサーバにアクセスできません。
.It
.Pa cvsupd.access
が存在してファイル中に規則が書かれているけれど、
.Pa cvsupd.passwd
ファイルが存在しない場合は、
.Em 認証
規則が成功するとアクセスが拒否されます。この場合でも、
.Em 許可
規則が成功したクライアントはアクセスできます。
.Pa cvsupd.access
ファイルの最後まで来た場合には、アクセスは拒否されます。
.It
.Pa cvsupd.access
.Pa cvsupd.passwd
がどちらも存在する場合の動作は以下の通りです:
.Bl -bullet -compact
.It
.Em 許可
規則が成功すると認証無しでアクセスが許可されます。
.It
.Em 認証
規則が成功すると認証が実行されます。アクセスの可否は認証の結果によって
決まります。
.Pa cvsupd.access
ファイルの最後に来るケースは、これに含まれます。
.It
.Em 拒否
規則が失敗するとアクセスは拒否されます。
.El
.El
.Sh "RCS キーワードの展開"
チェックアウトモードでは、
.Nm CVSup
.Xr co 1
で説明されているように RCS キーワードを展開します。
.Nm CVSup
は標準的キーワードは全て展開し、さらに非標準のキーワードである
.Ql $\&CVSHeader$
も展開します。
この展開は
.Ql $\&Header$
と同様に行われますが、RCS ファイルのパス名が絶対パスではなく
.Cm prefix
ディレクトリからの相対パスで表記される点が異なります。
ここで
.Cm prefix
は CVS レポジトリのルートディレクトリです。
.Pp
標準 RCS キーワードの別名を定義し、それぞれのキーワードの解釈を選択的に
有効・無効にすることも可能です。
この設定は、
.Ar prefix Ns Pa /CVSROOT/options
ファイルに書かれているキーワードによって、
レポジトリ全体を単位として制御されます。
1 行には 1 つのキーワードが書かれます。
.Ql #
から行末まではコメントと見なされます。
また空白行は無視されます。
歴史的な経緯のために文法は変てこです。
.Pp
キーワードの別名を定義するには、次の形式の行を使います :
.Sm off
.Dl tag= Ar alias Op Li = Ar keyword
.Sm on
例えば:
.Dl tag=FreeBSD=CVSHeader
は新しい RCS キーワード
.Ql $\&FreeBSD$
を定義し、これは
.Ql $\&CVSHeader$
と同様に展開されます。
二番目の
.Ql =
.Ar keyword
がない場合、キーワードのデフォルト値は
.Ql Id
です。
.Pp
選んだ特定のキーワード以外を全て無効にするには、次の形式の行を使います:
.Sm off
.Dl tagexpand=i Ar keyword Op , Ar ...
.Sm on
例えば
.Dl tagexpand=iFreeBSD,Id
と書くと
.Ql $\&FreeBSD$
.Ql $\&Id$
以外の全てのキーワードの展開を行わなくなります。
最初の
.Ql i
.Dq include
の意味です。
.Pp
選択した特定のキーワード以外を全て有効にするためには、次の形式の行を使
います:
.Sm off
.Dl tagexpand=e Ar keyword Op , Ar ...
.Sm on
例えば
.Dl tagexpand=eFreeBSD,Id
と書くと、
.Ql $\&FreeBSD$
.Ql $\&Id$
以外の全てのキーワードの展開を行うようになります。
先頭の
.Ql e
.Dq exclude
の意味です。
.Sh シャットダウン
サーバの起動よりも後に作られた
.Ar base Ns Pa /cvsupd.HALT
というファイルが存在すると、サーバは全ての新規接続要求を受け入れなくな
ります。
すでに接続されているクライアントは最後まで実行されますが、新しい接続は一
切受け付けなくなります。
この仕組みは不便で非力なため、おそらく将来のリリースでは変更されるでしょ
う。
.Sh セキュリティ
.Nm
は、コマンドラインで指定するログファイルを除いて、新しいファイルの作成
やファイルへの書き込みは行いません。
.Nm
が動作していることによってシステムにダメージを与える可能性はほとんどあり
ません。
それよりも可能性の高いセキュリティ上の危険として、
.Nm
が騙されて公開すべきでないファイルを送り出してしまうことがあります。
.Nm
ではこのようなことがないように細心の注意を払っています。
それでもやはり、最大の防御は
.Nm
.Ql nobody
のような全く権限のないユーザで実行し、誰でも読めるファイルしか提供でき
ないようにすることです。
.Pp
.Nm CVSup
は、ネットワーク上を流れるデータの暗号化には対応していません。
機密性が必要であれば、
.Nm ssh
を使って接続をトンネリングしてください。
.Sh ファイル
.Bl -tag -width base/sup/collection/releasesxx -compact
.It Pa /usr/local/etc/cvsup
デフォルトの
.Ar 起点
ディレクトリ。
.It Pa sup
デフォルトの
.Ar collDir
サブディレクトリ。
.Sm off
.It Xo Ar base / Ar collDir / Ar collection
.Pa /releases
.Xc
.Sm on
リリースファイル。
.Sm off
.It Xo Ar base / Ar collDir / Ar collection
.No / Ar list
.Xc
.Sm on
リストファイル。
.It Ar base Ns Pa /cvsupd.HALT
シャットダウンファイル。
.It Ar base Ns Pa /cvsupd.access
アクセス制御ファイル。
.It Ar base Ns Pa /cvsupd.passwd
認証パスワードファイル。
.Sm off
.It Ar prefix Pa /CVSROOT/options
.Sm on
RCS キーワード設定ファイル。
.El
.Sh 関連項目
.Xr co 1 ,
.Xr cvpasswd 1 ,
.Xr cvs 1 ,
.Xr cvsup 1
.Pp
.Bd -literal
http://www.polstra.com/projects/freeware/CVSup/
.Ed
.Sh 作者
.An John Polstra Aq jdp@polstra.com
.Sh バグ
ファイル名の末尾が
.Ql \&,v
になっていない RCS ファイルは認識されません。
.Pp
.Ql Attic
という名前のディレクトリは全て CVS Attic と見なされ、特別な扱いを受けます。