author | Paul Crowley <paul@lshift.net> |
Thu, 15 Oct 2009 10:57:25 +0100 (2009-10-15) | |
changeset 149 | dc4ed4edb458 |
parent 96 | 975fb921c3f3 |
child 164 | 32131253c2f1 |
permissions | -rwxr-xr-x |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
1 |
#!/usr/bin/env python |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
2 |
|
84
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
3 |
import sys |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
4 |
import shutil |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
5 |
import os |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
6 |
import pwd |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
7 |
import subprocess |
87
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
8 |
import optparse |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
9 |
|
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
10 |
oparser = optparse.OptionParser() |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
11 |
|
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
12 |
oparser.add_option("--prefix") |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
13 |
oparser.add_option("--root") |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
14 |
oparser.set_defaults(root="", prefix="/usr/local") |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
15 |
(options, args) = oparser.parse_args() |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
16 |
|
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
17 |
if len(args) > 0: |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
18 |
oparser.print_help() |
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
19 |
sys.exit(-1) |
27
ec31ba248edd
Installer to set things up automatically
Paul Crowley <paul@ciphergoth.org>
parents:
diff
changeset
|
20 |
|
84
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
21 |
# This must be run as root, because it must create an hg user. |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
22 |
# Normally the clean thing to do is let it fail with a permission error |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
23 |
# if a non-root user tries to run it, but I don't want anyone thinking |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
24 |
# that they can make it work as non-root by changing install paths. |
89 | 25 |
# Patches for doing this more cleanly welcome of course. |
84
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
26 |
|
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
27 |
if os.getgid() != 0: |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
28 |
print >>sys.stderr, "Install must be run as root user" |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
29 |
sys.exit(-1) |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
30 |
|
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
31 |
|
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
32 |
def installFiles(d, *sources): |
87
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
33 |
d = options.root + d |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
34 |
os.makedirs(d) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
35 |
for f in sources: |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
36 |
shutil.copy(f, d) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
37 |
|
92 | 38 |
installFiles(options.prefix + '/share/mercurial-server', |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
39 |
'src/hg-ssh', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
40 |
'src/refresh-auth') |
92 | 41 |
installFiles(options.prefix + '/share/mercurial-server/mercurialserver', |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
42 |
'src/mercurialserver/__init__.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
43 |
'src/mercurialserver/paths.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
44 |
'src/mercurialserver/changes.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
45 |
'src/mercurialserver/access.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
46 |
'src/mercurialserver/servelog.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
47 |
'src/mercurialserver/refreshauth.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
48 |
'src/mercurialserver/ruleset.py') |
92 | 49 |
installFiles(options.prefix + '/share/mercurial-server/init', |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
50 |
'src/init/hginit', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
51 |
'src/init/hgadmin-hgrc') |
94 | 52 |
installFiles(options.prefix + '/share/doc/mercurial-server', |
53 |
'README', |
|
54 |
'doc/configuring-access', |
|
55 |
'doc/file-conditions', |
|
56 |
'doc/how-it-works', |
|
57 |
'doc/security') |
|
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
58 |
installFiles('/etc/mercurial-server', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
59 |
'src/init/conf/remote-hgrc', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
60 |
'src/init/conf/access.conf') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
61 |
installFiles('/etc/mercurial-server/keys/root') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
62 |
installFiles('/etc/mercurial-server/keys/users') |
27
ec31ba248edd
Installer to set things up automatically
Paul Crowley <paul@ciphergoth.org>
parents:
diff
changeset
|
63 |
|
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
64 |
def becomeFunc(u): |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
65 |
p = pwd.getpwnam(u) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
66 |
def become(): |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
67 |
os.setgid(p.pw_gid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
68 |
os.setegid(p.pw_gid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
69 |
os.setuid(p.pw_uid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
70 |
os.seteuid(p.pw_uid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
71 |
return become |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
72 |
|
91
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
73 |
if options.root == '': |
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
74 |
try: |
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
75 |
pwd.getpwnam('hg') |
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
76 |
except KeyError: |
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
77 |
subprocess.check_call( |
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
78 |
"adduser --system --shell /bin/sh --group --disabled-password".split() + |
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
79 |
["--gecos", "Mercurial repositories", "hg"]) |
96 | 80 |
subprocess.check_call([options.prefix + '/share/mercurial-server/init/hginit', |
81 |
options.prefix + '/share/mercurial-server'], |
|
91
69dd70e1d844
Don't try to create user if we're installing outside /
Paul Crowley <paul@lshift.net>
parents:
90
diff
changeset
|
82 |
preexec_fn = becomeFunc('hg')) |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
83 |