рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ + рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ + рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдмрдВрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд░реНрдгрд┐рдд рд╣реИ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреА рдЧрдИ рд╣реИред

рдЙрджреНрджреЗрд╢реНрдпреЛрдВ:

рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░реЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рдиред

рд╕рдорд╛рдзрд╛рди:

рдкреНрд░реЙрдХреНрд╕реА рд╕реНрддрд░ рдХреЗ рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдореНрдмреЗрдбреЗрдб 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.conf
hg ~ # 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
  1. #! / рдмрд┐рди / рдмреИрд╢
  2. tmphtpass = "/ var / tmp / htpass" # рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
  3. repohome = "/ home / repos /" # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
  4. hgervepid = "/var/run/hgserver.pid" #pid hg рдкрд░реЛрд╕реЗрдВ
  5. hgaccesslog = "/var/log/hg_access.log" hg рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП #access рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓
  6. рдбреЛрдореЗрди = "exapmple.com" #tld рд╕рд░реНрд╡рд░ рдирд╛рдо
  7. рдХреЙрдиреНрдлрд┐рдбрд░ = "/ etc / hg /" # рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдлреЛрд▓реНрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
  8. confile = $ {confdir} "repo.cfg" # рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ /etc/hg/repo.cfg
  9. webconfig = $ {confdir} "web.config" # hg рд╕рд░реНрд╡рд░ /etc/hg/web.config рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕
  10. nginxconfig = $ {confdir} "nginx.conf" # nginx /etc/hg/nginx.conf рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
  11. nginxauthdir = $ {confdir} "nginx /" # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝реЛрд▓реНрдбрд░
  12. [ -s $ {рдХрдВрдлрд░реНрдЯ} ] || рдЗрдХреЛ "рдЬрд╣рд╛рдВ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рд╣реИ?" # рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  13. [ -s $ {рдХрдВрдлрд░реНрдЯ} ] || рдпрджрд┐ рдХреЛрдИ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ 0 # рдкрд░реЗрд╢рд╛рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ
  14. # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП [рд░рд┐рдкреЛрдЬ] рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
  15. repos = ` рдмрд┐рд▓реНрд▓реА $ {рдЪрдХрд┐рдд} | sed '/ ^ $ / d' | sed '/ ^ # / d' | sed 's / \ // g' | awk '/ \ [repos \] / {
  16. is_repos = 1;
  17. рдЬрдмрдХрд┐ (is_repos == 1)
  18. {рдЕрдЧрд░ (рдЧреЗрдЯрд▓рд╛рдЗрди <= 0 || рдЗрдВрдбреЗрдХреНрд╕ ($ 0, "[") == 1)
  19. {is_repos = 0 ;;
  20. рдЕрдиреНрдпрдерд╛
  21. {рдкреНрд░рд┐рдВрдЯ $ 0;}}} ' '
  22. # рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдмрдирд╛рдПрдБ
  23. рдореИрдВ $ {рд░реЗрдкреЛ} рдореЗрдВ
  24. рдХрд░реЛ ; [ -d $ {repohome} $ {i} ] || / usr / bin / hg init $ {repohome} $ {i} ; рдХрд┐рдпрд╛
  25. # hg рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
  26. рдЧреВрдВрдЬ "[рд╡реЗрдм]
  27. allow_push = *
  28. push_ssl = рдЭреВрдареА
  29. [рдкрде] " > $ {webconfig}
  30. # рд╕рдХреНрд░рд┐рдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рддрдХ рдХреЗрд╡рд▓ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
  31. рдореИрдВ $ {рд░реЗрдкреЛ} рдореЗрдВ
  32. рдХрд░реЛ ; рдЧреВрдВрдЬ $ {i} = $ {repohome} $ {i} >> $ {webconfig} ; рдХрд┐рдпрд╛
  33. # рд░рд┐рдмреВрдЯ рдПрдЪрдЬреА рдХреА рд╕реЗрд╡рд╛
  34. [ -a $ {hgervepid} ] && / bin / рдХрд┐рд▓ `/ рдмрд┐рди / рдмрд┐рд▓реНрд▓реА $ {hgervepid} ` && rm $ {hgervepid}
  35. / usr / bin / hg рд╕рд░реНрд╡ рдХрд░реЗрдВ -d $-hgaccesslog} -p 8080 -a 127.0.0.1 --pid-file $ {hgervepid} --encoding utf8 --webdir-conf {{webconfig}
  36. # nginx рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВ
  37. рдЗрдХреЛ "рд╕рд░реНрд╡рд░
  38. {
  39. 443 рд╕реБрдиреЛ;
  40. server_name hgред " $ {рдбреЛрдореЗрди} ";
  41. client_max_body_size 128M;
  42. ssl on;
  43. ssl_certificate /etc/ssl/nginx/nginx.pem;
  44. ssl_certificate_key /etc/ssl/nginx/nginx.key; " > $ {nginxconfig}
  45. # рд╕рдХреНрд░рд┐рдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд▓реИрдХреЗрдЬ рдмрдирд╛рдПрдВ
  46. рдореИрдВ $ {рд░реЗрдкреЛ} рдореЗрдВ
  47. рдХрд░рдирд╛
  48. рдЗрдХреЛ "рд╕реНрдерд╛рди /" $ {i} "
  49. {
  50. рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ http://127.0.0.1:8080;
  51. рдСрд░реНрдЯрд┐рдХ_рдмреЗрд╕рд┐рдХ \ " рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд \" ;
  52. рднреЗрд╖рдЬ_рдмрд╛рд╕рд┐рдХ_рд╕реБрдЕрд░_рдлрд╛рдЗрд▓ " $ {nginxauthdir} $ {i } .рдкрд╛рд╕;
  53. access_log / var / log / nginx / " $ {i} " .hgред " $ {domain} " .ssl_access_log main;
  54. error_log / var / log / nginx / " $ {i} " .hgред " $ {domain} " .ssl_error_log рдЬрд╛рдирдХрд╛рд░реА;
  55. } " >> $ {nginxconfig}
  56. рдХрд┐рдпрд╛
  57. рдЧреВрдВрдЬ "}" >> $ {nginxconfig}
  58. # рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ (рдХреЗрд╡рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ)
  59. рдмрд┐рд▓реНрд▓реА / рджреЗрд╡ / рдЕрд╢рдХреНрдд > $ {tmphtpass}
  60. # рдореБрдЦреНрдп рдХреЙрдиреНрдлрд┐рдЧ рд╕реЗрдХреНрд╢рди [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ] рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
  61. # рд╕рднреА рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
  62. рдмрд┐рд▓реНрд▓реА $ {рдХрдВрдлрд░реНрдЯ} | sed '/ ^ $ / d' | sed '/ ^ # / d' | sed 's / \ // g' | awk -v passfile = $ tmphtpass '/ \ [users \] / {
  63. is_users = 1;
  64. рдЬрдмрдХрд┐ (is_users == 1)
  65. {рдЕрдЧрд░ (рдЧреЗрдЯрд▓рд╛рдЗрди <= 0 || рдЗрдВрдбреЗрдХреНрд╕ ($ 0, "[") == 1)
  66. {is_users = 0 ;;
  67. рдЕрдиреНрдпрдерд╛
  68. {рд╡рд┐рднрд╛рдЬрди ($ 0, рдпреВрдЬрд░рдкрд╛рд╕, "="); рдкреНрд░рдгрд╛рд▓реА ("htpasswd -b" рдкрд╛рд╕рдлрд╛рдЗрд▓ "" рдпреВрдЬрд░рдкрд╛рд╕ [1] "" рдпреВрдЬрд░рдкрд╛рд╕ [2]);}}}} '' '
  69. # рдореБрдЦреНрдп рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ [рдкрд╣реБрдБрдЪ] рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ
  70. # рдФрд░ рдлреЙрд░реНрдо рд░реЗрдкреЛ = user1, user2 рдХреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  71. access = ` cat $ {confile} | sed '/ ^ $ / d' | sed '/ ^ # / d' | sed 's / \ // g' | awk '/ \ [access \] / {
  72. is_access = 1; рдЬрдмрдХрд┐ (is_access == 1)
  73. {рдЕрдЧрд░ (рдЧреЗрдЯрд▓рд╛рдЗрди <= 0 || рдЗрдВрдбреЗрдХреНрд╕ ($ 0, "[") == 1)
  74. {is_access = 0 ;;
  75. рдЕрдиреНрдпрдерд╛
  76. {рдкреНрд░рд┐рдВрдЯ $ 0;}}} ' '
  77. # рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ
  78. [ -d $ {nginxauthdir} ] || mkdir -p $ {nginxauthdir}
  79. # рдкреБрд░рд╛рдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  80. $ {nginxauthdir} -type f -name * .pass -delete рдЦреЛрдЬреЗрдВ
  81. # [рдПрдХреНрд╕реЗрд╕] рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
  82. i рдореЗрдВ $ {рдкрд╣реБрдВрдЪ} рдХреЗ рд▓рд┐рдП
  83. рдХрд░реЛ ; рдЧреВрдВрдЬ $ {i} | sed 's /, / \ | / g' awk -v tmphtpass = $ {tmphtpass} -v nginxauthdir = $ {nginxauthdir} \ n
  84. 'BEGIN {FS = "="} {system ("cat" tmphtpass "| egrep \" "$ 2" \ ">" nginxauthdir "" $ 1 ".pass")} " рдХрд┐рдпрд╛ред
  85. # рдирдЧреНрдиреЗрдХреНрд╕ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ
  86. / etc / init.d / nginx рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  87. # рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд╕рд╡рд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛рдПрдБ
  88. rm $ {tmphtpass}
рдореИрдВ рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рднреА рдХрд░рддрд╛ рд╣реВрдВ : hgmkrep.tar.gz

рдореМрдЬреВрджрд╛ рдиреБрдХрд╕рд╛рди:

1. рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░ рдХреА рдХрдореА, рд╕рдореНрд░рд╛рдЯ рдХреЗ рд╢рд░реАрд░ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред
2. рдкрд╣реБрдБрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
3. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд░реЛрд▓рдмреИрдХ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рдкрддрди рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛)
4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрд╣реБрддрд╛рдпрдд рд╕реЗ рдЕрдкрдиреА рджреГрд╢реНрдпрддрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИ


Source: https://habr.com/ru/post/In115007/


All Articles