彼は自分のブログで、debianを搭載したサーバー上で独自の水銀リポジトリをapache2で作成し、Web上で表示する方法に関する
詳細なマニュアルを書きました。 おそらくubuntuに適合します。
可能であれば、ブログとここの両方を同時に更新しようとしますが、ブログが優先されます。 ブログのマークダウンで、スパースされていない<code>ブロックをすぐに謝罪します。このhtmlでは、パーサーは生成されたhtmlを理解したくないので、<code>と</ code>に注意を払いません
タスク:apache2がインストールされたdebianサーバーでmercurialリポジトリを作成および設定します。
とても簡単ですが、いくつかの微妙な点があります。 すべての手順は、debian lennyと、場合によってはubuntuに有効です(バージョンはわかりません)。 私たちのリポジトリは
hg.example.com/public
hg.example.com/public
。
いくつかの規則
- 実行する必要のあるすべてのコマンドの前には、「
#
」記号が付いています(コマンドはスーパーユーザー特権で実行する必要があります)。 または記号「 $
」(コマンドは通常のユーザーの権限で実行する必要があります)。 - すべての手順は、推奨される実行順序で示されています。 自分が何をしているかを本当に理解している場合にのみ、ステップを省略できます。
vi
エディターとしてあらゆる場所vi
使用されていますが、もちろん、好みに応じて他のものを使用できます。
インストール手順
mercurial
をインストールします。
<code>#aptitude install mercurial
</ code>
- システムに別のユーザーを作成します。リポジトリが属するのはこのユーザーです。 ユーザーのホームディレクトリは
/home/hg
ます。
<code>#useradd hg
#mkdir / home / hg
#chown hg:hg / home / hg
</ code>
- このユーザーでログインします(
sudo su - hg
)。 リポジトリー用のディレクトリーを作成します(この例では/home/hg/repo
)
<code> $ mkdir / home / hg / repo
</ code>
DocumentRoot仮想ホストのディレクトリ:
<code> $ mkdir / home / hg / web
</ code>
- リポジトリを直接作成します。
<code> $ cd repo
$ hg init
</ code>
リポジトリが作成されました。次に、http経由でリポジトリへのアクセスを整理するようにApacheを構成する必要があります。 - apache2とsuexecモジュールをインストールします。
<code>#aptitude install apache2 apache2-suexec
#a2enmod suexec
</ code>
hg.example.com
ドメインの仮想ホストをhg.example.com
ます。 これを行うには、 /etc/apache2/sites-available
ディレクトリに仮想ホストのパラメーターの説明を含むファイルを作成します。
<code>#vi /etc/apache2/sites-available/hg.regolit.com
</ code>
およそ次の内容のファイルを作成します。
<code> NameVirtualHost *:80
<VirtualHost *:80>
ServerName hg.example.com
DocumentRoot / home / hg / web
SuexecUserGroup hg hg
エイリアス/パブリック/ var / www / hg-public
<ディレクトリ "/ var / www / hg-public">
オプションExecCGI
DirectoryIndex hgweb.cgi
AddHandler cgi-script .cgi
注文許可、拒否
すべてから許可
AuthUserFile /home/hg/.hg.htpasswd
AuthGroupFile / dev / null
AuthName "パブリックリポジトリ"
AuthType Basic
<GETExceptを除く>
有効なユーザーが必要
</ LimitExcept>
</ Directory>
</ VirtualHost>
</ code>
新しく作成した仮想ホストをオンにして、Apacheを再起動します。
<code>#a2ensite hg.example.com
#/etc/init.d/apache2 force-reload
</ code>
<LimitExcept GET>
ブロックに注意して<LimitExcept GET>
。これは、リポジトリを読み取るときにパスワードが要求されないことを意味します(つまり、 GET
などのhttpリクエスト)。 プライベートリポジトリを整理したい場合は、このブロックをコメントアウトしてください。- 次に、リポジトリにアクセスするためのスクリプトを作成する必要があります。
mercurial-common
パッケージには、必要なファイル/usr/share/doc/mercurial-common/examples/hgweb.cgi
がすでに含まれて/usr/share/doc/mercurial-common/examples/hgweb.cgi
。 /var/www/hg-public
ディレクトリにコピーして、少し修正する必要があります。
<code>#mkdir / var / www / hg-public
#cp /usr/share/doc/mercurial-common/examples/hgweb.cgi / var / www / hg-public /
#chown -R hg:hg / var / www / hg-public
#chmod + x /var/www/hg-public/hgweb.cgi
</ code>
suexecが正しく動作するには、スクリプトが/var/www
ディレクトリにあり、その所有者/グループがhg
必要があります( SuexecUserGroup hg hg
ディレクティブを覚えておいてSuexecUserGroup hg hg
)。 - ファイル
/var/www/hg-public/hgweb.cgi
をテキストエディターで開き、編集します。 交換:
<code> application = hgweb( "/ path / to / repo"、 "リポジトリ名")
</ code>
に
<code> application = hgweb( "/ home / hg / repo"、 "Our public repo")
</ code>
行は異なって見えるかもしれませんが、簡単に見つけて、作成されたリポジトリーへのフルパスを入力できます( /path/to/repo
to /home/hg/repo
)。 - 次に、プッシュアクションに使用するユーザー名を決定する必要があります。 この例では、
hg-user
という名前を使用しhg-user
。
<code>#su-hg
$ htpasswd -c /home/hg/.hg.htpasswd hg-user
</ code>
パスワードを設定します。 次に、リポジトリオプションでこの名前を直接指定する必要があります。このため、次の内容のファイル/home/hg/repo/.hg/hgrc
を作成します。
<code> [web]
allow_push = hg-user
push_ssl = false
</ code>
- ネットワークリポジトリにはURLがあります
hg.example.com/public
hg.example.com/public
hg push
は、 htpasswd
コマンドで指定された名前hg-user
とパスワードで実行されます。 お楽しみください。
いくつかのコメント
非SSLリポジトリの作成プロセスについて説明します。SSLについては、原則としてすべてがまったく同じであり、仮想ホストのブロックに追加する必要があるのはSSLのディレクティブのみです。
他のユーザーのディレクトリで混乱を生まないように、別のユーザーが使用されます。
スクリプトは、suexecでスクリプトが存在する必要があるため、
/var/www
ディレクトリに配置されます。