рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ + рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдмрдВрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд░реНрдгрд┐рдд рд╣реИ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреА рдЧрдИ рд╣реИред
рдЙрджреНрджреЗрд╢реНрдпреЛрдВ:
рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░реЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рдиред
рд╕рдорд╛рдзрд╛рди:
рдкреНрд░реЙрдХреНрд╕реА рд╕реНрддрд░ рдХреЗ рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб http рд╕рд░реНрд╡рд░ (hg рд╕рд░реНрд╡) рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ред
рдбреЗрдЯрд╛ рдЕрд╡рд░реЛрдзрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрд╕рд╛рдзрди рдХреА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Nginx рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рди рдирд┐рд░реНрджреЗрд╢рди рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдордЭреМрддрд╛:
рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ - рдЬреЗрдВрдЯреВ
https://hg.expample.com/reponame - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ
hg.example.com - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рд░реНрд╡рд░ рдХрд╛ рдбреЛрдореЗрди рдирд╛рдо
рдкреБрди : рдирд╛рдо - рдЖрд╡рд╢реНрдпрдХ рднрдВрдбрд╛рд░ рдХрд╛ рдирд╛рдо
/ home / repos - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░
/ etc / hg - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░
рдЗрд╕ рдкрд╛рдардХ рдХреЗ рдкрд╛рд╕ рдиреНрдпреВрдирддрдо рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рди рдХреМрд╢рд▓ рд╣реИред
рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛:
hg ~ # emerge mercurial <br> hg ~ # emerge nginx
рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдЯ-рдЗрди
http рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ
hg ~ # /usr/bin/hg serve -d -A /var/log/hg_access.log -p 8080 -a 127.0.0.1 --pid-file /var/run/hgserver.pid --encoding utf8 --webdir-conf /etc/hg/web.config
рдирд┐рд░реНрджреЗрд╢ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
-d - рд╕рд░реНрд╡рд░ рдХреЛ рдбреЗрдореЙрди рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ
-A /var/log/hg_access.log - рд╕рд░реНрд╡рд░ рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ
-p 8080 - рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдЬрд┐рд╕ рдкрд░ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ
-a 127.0.0.1 - рдЖрдИрдкреА рдкрддрд╛ рдЬрд┐рд╕ рдкрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
--pid-file /var/run/hgserver.pid - рд╕рд░реНрд╡рд░ рдкреНрд░реЛрд╕реЗрд╕ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓
--encoding utf8 - рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
--webdir-conf /etc/hg/web.config - рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
hg ~ # cat /etc/hg/web.config <br> [web] // <br> allow_push = * // тАЬтАЭ ( ) <br> push_ssl = false // ssl ( ) <br> [paths] // тАЬтАЭ <br> rep1=/home/repos/rep1 // : - rep1 <br> rep2=/home/repos/rep2 // : - rep2 <br>
рд╣рдо рдореБрдЦреНрдп
Nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
hg ~ # cat /etc/nginx/nginx.conf |grep -i include <br> include "/etc/hg/nginx.conf";
рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
/etc/hg/nginx.confhg ~ # cat /etc/hg/nginx.conf <br> server <br> {<br> listen 443;<br> server_name hg.example.com;<br> client_max_body_size 128M;<br> ssl on;<br> ssl_certificate /etc/ssl/nginx/nginx.pem;<br> ssl_certificate_key /etc/ssl/nginx/nginx.key;<br>location /repo1<br> {<br> proxy_pass http://127.0.0.1:8080;<br> auth_basic "Restricted";<br> auth_basic_user_file /etc/hg/nginx/repo1.pass;<br> access_log /var/log/nginx/repo1.hg.example.com.ssl_access_log main;<br> error_log /var/log/nginx/repo1.hg.example.com.ssl_error_log info;<br> }<br>location /repo2<br> {<br> proxy_pass http://127.0.0.1:8080;<br> auth_basic "Restricted";<br> auth_basic_user_file /etc/hg/nginx/repo2.pass;<br> access_log /var/log/nginx/repo2.hg.example.com.ssl_access_log main;<br> error_log /var/log/nginx/repo2.hg.example.com.ssl_error_log info;<br> }<br>}<br>
рдЕрдиреБрднрд╛рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рд╕реНрдерд╛рди / рд░реЗрдкреЛ 1рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ - рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХрд╣рд╛рдВ рднреЗрдЬреЗрдВ
рдСрд░реНрдЯрд┐рдХрд▓_рдмреЗрд╕рд┐рдХ - HTTP рдмреЗрд╕рд┐рдХ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
schem_basic_user_file - рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ
access_log рдФрд░ error_log - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧрд┐рдВрдЧ рдирд┐рд░реНрджреЗрд╢
Htpasswd рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ
(
htpasswd рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ
рдЕрдкрд╛рдЪреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ
рдЙрднрд░рддреЗ рд╣реБрдП рдЕрдкрд╛рдЪреЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)
hg ~ # htpasswd -bc /etc/hg/nginx/repo2.pass test2 testpass2 <br> hg ~ # htpasswd -bc /etc/hg/nginx/repo1.pass test1 testpass1
-b - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
-c - рдПрдХ рдирдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
/etc/hg/nginx/repo1.pass - рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо
test1 - рдЬреЛрдбрд╝рд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд▓реЙрдЧрд┐рди
testpass1 - рдЬреЛрдбрд╝реЗ рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб
рдпрд╣ hg init рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ
hg ~ # hg init /home/repos/repo1 <br> hg ~ # hg init /home/repos/repo2
рд╣рдо
рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдЯреАрдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
hg ~ # /etc/init.d/nginx start
рдЕрдм
рд░реЗрдкреЛ 1 рдФрд░
рд░реЗрдкреЛ 2 рдХреЛ
рд░рд┐рдкреЛрдЬ рдХрд░реЗрдВрдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдХреНрд░рдорд╢рдГ
https://hg.example.com/repo1 рдФрд░
https://hg.example.com/repo2 ред
рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░реЛрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдкреГрдердХреНрдХрд░рдг рдХреЗ рд╕рд╛рдеред
рдпрд╣ рд▓реЗрдЦ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕реЗ рд╣рд░ 3-5 рдорд╣реАрдиреЗ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдХреНрд╕рд░ рдмрджрд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ? рд╕рд╣реА рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рддреБрд░рдВрдд рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рддрд▓рд╛рд╢рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
1. рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рднрдВрдбрд╛рд░ рдкреНрд░рдмрдВрдзрди рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
2. рдЕрдкрдиреЗ рдЕрдзреАрдирд╕реНрде рдХреЛ рд╕рдореНрдорд╛рдирдЬрдирдХ рдХрд░реНрддрд╡реНрдп рд╕реМрдВрдкреЗрдВред
3. рдЦреБрдж рдПрдХ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдВред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рди рддреЛ рдкрд╣рд▓рд╛ рдФрд░ рди рд╣реА рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рдЕрдиреБрдХреВрд▓ рдерд╛
, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдиреЗ рдЖрд▓рд╕реНрдп рдХреЛ рджреВрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛редрдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереА рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИред
рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
1. рдмрдирд╛рдПрдВ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
2. рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ред (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ)ред
3. Nginx рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдирд╛ред
4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрддрд░ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рд╡рд┐рддрд░рдгред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
1. рд╡рд░реНрдЧреЛрдВ рдХреЗ рджреГрд╢реНрдп рдкреГрдердХреНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ
2. рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "#" рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреАрди рдЦрдВрдб рд╣реЛрддреЗ рд╣реИрдВред
[users] - : -. тАЬ=тАЭ<br>user1=pass1<br>user2=pass2<br>user3=pass3<br> [repos] - <br>repo1<br>repo2<br>repo3<br> [access] - , тАЬ,тАЭ<br>repo1 = user1 , user2,user3 - user1,user2,user3<br>repo2 = user1,user2 - user1 user2<br>repo3 = user3 - user3<br>
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
/usr/local/sbin/hgmkrep.sh- #! / рдмрд┐рди / рдмреИрд╢
- tmphtpass = "/ var / tmp / htpass" # рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
- repohome = "/ home / repos /" # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
- hgervepid = "/var/run/hgserver.pid" #pid hg рдкрд░реЛрд╕реЗрдВ
- hgaccesslog = "/var/log/hg_access.log" hg рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП #access рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓
- рдбреЛрдореЗрди = "exapmple.com" #tld рд╕рд░реНрд╡рд░ рдирд╛рдо
- рдХреЙрдиреНрдлрд┐рдбрд░ = "/ etc / hg /" # рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдлреЛрд▓реНрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
- confile = $ {confdir} "repo.cfg" # рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ /etc/hg/repo.cfg
- webconfig = $ {confdir} "web.config" # hg рд╕рд░реНрд╡рд░ /etc/hg/web.config рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕
- nginxconfig = $ {confdir} "nginx.conf" # nginx /etc/hg/nginx.conf рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
- nginxauthdir = $ {confdir} "nginx /" # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░
- [ -s $ {рдХрдВрдлрд░реНрдЯ} ] || рдЗрдХреЛ "рдЬрд╣рд╛рдВ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рд╣реИ?" # рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
- [ -s $ {рдХрдВрдлрд░реНрдЯ} ] || рдпрджрд┐ рдХреЛрдИ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ 0 # рдкрд░реЗрд╢рд╛рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ
- # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП [рд░рд┐рдкреЛрдЬ] рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
- repos = ` рдмрд┐рд▓реНрд▓реА $ {рдЪрдХрд┐рдд} | sed '/ ^ $ / d' | sed '/ ^ # / d' | sed 's / \ // g' | awk '/ \ [repos \] / {
- is_repos = 1;
- рдЬрдмрдХрд┐ (is_repos == 1)
- {рдЕрдЧрд░ (рдЧреЗрдЯрд▓рд╛рдЗрди <= 0 || рдЗрдВрдбреЗрдХреНрд╕ ($ 0, "[") == 1)
- {is_repos = 0 ;;
- рдЕрдиреНрдпрдерд╛
- {рдкреНрд░рд┐рдВрдЯ $ 0;}}} ' '
- # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдмрдирд╛рдПрдБ
- рдореИрдВ $ {рд░реЗрдкреЛ} рдореЗрдВ
- рдХрд░реЛ ; [ -d $ {repohome} $ {i} ] || / usr / bin / hg init $ {repohome} $ {i} ; рдХрд┐рдпрд╛
- # hg рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
- рдЧреВрдВрдЬ "[рд╡реЗрдм]
- allow_push = *
- push_ssl = рдЭреВрдареА
- [рдкрде] " > $ {webconfig}
- # рд╕рдХреНрд░рд┐рдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рддрдХ рдХреЗрд╡рд▓ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
- рдореИрдВ $ {рд░реЗрдкреЛ} рдореЗрдВ
- рдХрд░реЛ ; рдЧреВрдВрдЬ $ {i} = $ {repohome} $ {i} >> $ {webconfig} ; рдХрд┐рдпрд╛
- # рд░рд┐рдмреВрдЯ рдПрдЪрдЬреА рдХреА рд╕реЗрд╡рд╛
- [ -a $ {hgervepid} ] && / bin / рдХрд┐рд▓ `/ рдмрд┐рди / рдмрд┐рд▓реНрд▓реА $ {hgervepid} ` && rm $ {hgervepid}
- / usr / bin / hg рд╕рд░реНрд╡ рдХрд░реЗрдВ -d $-hgaccesslog} -p 8080 -a 127.0.0.1 --pid-file $ {hgervepid} --encoding utf8 --webdir-conf {{webconfig}
- # nginx рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВ
- рдЗрдХреЛ "рд╕рд░реНрд╡рд░
- {
- 443 рд╕реБрдиреЛ;
- server_name hgред " $ {рдбреЛрдореЗрди} ";
- client_max_body_size 128M;
- ssl on;
- ssl_certificate /etc/ssl/nginx/nginx.pem;
- ssl_certificate_key /etc/ssl/nginx/nginx.key; " > $ {nginxconfig}
- # рд╕рдХреНрд░рд┐рдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд▓реИрдХреЗрдЬ рдмрдирд╛рдПрдВ
- рдореИрдВ $ {рд░реЗрдкреЛ} рдореЗрдВ
- рдХрд░рдирд╛
- рдЗрдХреЛ "рд╕реНрдерд╛рди /" $ {i} "
- {
- рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ http://127.0.0.1:8080;
- рдСрд░реНрдЯрд┐рдХ_рдмреЗрд╕рд┐рдХ \ " рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд \" ;
- рднреЗрд╖рдЬ_рдмрд╛рд╕рд┐рдХ_рд╕реБрдЕрд░_рдлрд╛рдЗрд▓ " $ {nginxauthdir} $ {i } .рдкрд╛рд╕;
- access_log / var / log / nginx / " $ {i} " .hgред " $ {domain} " .ssl_access_log main;
- error_log / var / log / nginx / " $ {i} " .hgред " $ {domain} " .ssl_error_log рдЬрд╛рдирдХрд╛рд░реА;
- } " >> $ {nginxconfig}
- рдХрд┐рдпрд╛
- рдЧреВрдВрдЬ "}" >> $ {nginxconfig}
- # рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ (рдХреЗрд╡рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ)
- рдмрд┐рд▓реНрд▓реА / рджреЗрд╡ / рдЕрд╢рдХреНрдд > $ {tmphtpass}
- # рдореБрдЦреНрдп рдХреЙрдиреНрдлрд┐рдЧ рд╕реЗрдХреНрд╢рди [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ] рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
- # рд╕рднреА рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
- рдмрд┐рд▓реНрд▓реА $ {рдХрдВрдлрд░реНрдЯ} | sed '/ ^ $ / d' | sed '/ ^ # / d' | sed 's / \ // g' | awk -v passfile = $ tmphtpass '/ \ [users \] / {
- is_users = 1;
- рдЬрдмрдХрд┐ (is_users == 1)
- {рдЕрдЧрд░ (рдЧреЗрдЯрд▓рд╛рдЗрди <= 0 || рдЗрдВрдбреЗрдХреНрд╕ ($ 0, "[") == 1)
- {is_users = 0 ;;
- рдЕрдиреНрдпрдерд╛
- {рд╡рд┐рднрд╛рдЬрди ($ 0, рдпреВрдЬрд░рдкрд╛рд╕, "="); рдкреНрд░рдгрд╛рд▓реА ("htpasswd -b" рдкрд╛рд╕рдлрд╛рдЗрд▓ "" рдпреВрдЬрд░рдкрд╛рд╕ [1] "" рдпреВрдЬрд░рдкрд╛рд╕ [2]);}}}} '' '
- # рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ [рдкрд╣реБрдБрдЪ] рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
- # рдФрд░ рдлреЙрд░реНрдо рд░реЗрдкреЛ = user1, user2 рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- access = ` cat $ {confile} | sed '/ ^ $ / d' | sed '/ ^ # / d' | sed 's / \ // g' | awk '/ \ [access \] / {
- is_access = 1; рдЬрдмрдХрд┐ (is_access == 1)
- {рдЕрдЧрд░ (рдЧреЗрдЯрд▓рд╛рдЗрди <= 0 || рдЗрдВрдбреЗрдХреНрд╕ ($ 0, "[") == 1)
- {is_access = 0 ;;
- рдЕрдиреНрдпрдерд╛
- {рдкреНрд░рд┐рдВрдЯ $ 0;}}} ' '
- # рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ
- [ -d $ {nginxauthdir} ] || mkdir -p $ {nginxauthdir}
- # рдкреБрд░рд╛рдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
- $ {nginxauthdir} -type f -name * .pass -delete рдЦреЛрдЬреЗрдВ
- # [рдПрдХреНрд╕реЗрд╕] рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
- i рдореЗрдВ $ {рдкрд╣реБрдВрдЪ} рдХреЗ рд▓рд┐рдП
- рдХрд░реЛ ; рдЧреВрдВрдЬ $ {i} | sed 's /, / \ | / g' awk -v tmphtpass = $ {tmphtpass} -v nginxauthdir = $ {nginxauthdir} \ n
- 'BEGIN {FS = "="} {system ("cat" tmphtpass "| egrep \" "$ 2" \ ">" nginxauthdir "" $ 1 ".pass")} " рдХрд┐рдпрд╛ред
- # рдирдЧреНрдиреЗрдХреНрд╕ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ
- / etc / init.d / nginx рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
- # рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛рдПрдБ
- rm $ {tmphtpass}
рдореИрдВ рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рднреА рдХрд░рддрд╛ рд╣реВрдВ :
hgmkrep.tar.gzрдореМрдЬреВрджрд╛ рдиреБрдХрд╕рд╛рди:
1. рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рдХреА рдХрдореА,
рд╕рдореНрд░рд╛рдЯ рдХреЗ рд╢рд░реАрд░ рднрдВрдбрд╛рд░
рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред
2. рдкрд╣реБрдБрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
3. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд░реЛрд▓рдмреИрдХ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рдкрддрди рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛)
4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрд╣реБрддрд╛рдпрдд рд╕реЗ рдЕрдкрдиреА рджреГрд╢реНрдпрддрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИ