author | Paul Crowley <paul@lshift.net> |
Sat, 07 Mar 2009 10:11:02 +0000 | |
changeset 88 | ae1503386576 |
parent 87 | 535502c18eaa |
child 89 | 30a8be7ce326 |
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. |
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
25 |
# Patches welcome for doing this more cleanly of course. |
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 |
|
87
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
31 |
dest = options.prefix + "/lib/mercurial-server" |
84
964b04126d01
Force install as root and allow path to change.
Paul Crowley <paul@lshift.net>
parents:
80
diff
changeset
|
32 |
|
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
33 |
def installFiles(d, *sources): |
87
535502c18eaa
Give install real command line options
Paul Crowley <paul@lshift.net>
parents:
84
diff
changeset
|
34 |
d = options.root + d |
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
35 |
os.makedirs(d) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
36 |
for f in sources: |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
37 |
shutil.copy(f, d) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
38 |
|
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
39 |
installFiles(dest, |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
40 |
'src/hg-ssh', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
41 |
'src/refresh-auth') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
42 |
installFiles(dest + '/mercurialserver', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
43 |
'src/mercurialserver/__init__.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
44 |
'src/mercurialserver/paths.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
45 |
'src/mercurialserver/changes.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
46 |
'src/mercurialserver/access.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
47 |
'src/mercurialserver/servelog.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
48 |
'src/mercurialserver/refreshauth.py', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
49 |
'src/mercurialserver/ruleset.py') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
50 |
installFiles(dest + '/init', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
51 |
'src/init/hginit', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
52 |
'src/init/hgadmin-hgrc') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
53 |
installFiles('/etc/mercurial-server', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
54 |
'src/init/conf/remote-hgrc', |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
55 |
'src/init/conf/access.conf') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
56 |
installFiles('/etc/mercurial-server/keys/root') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
57 |
installFiles('/etc/mercurial-server/keys/users') |
27
ec31ba248edd
Installer to set things up automatically
Paul Crowley <paul@ciphergoth.org>
parents:
diff
changeset
|
58 |
|
80
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
59 |
def becomeFunc(u): |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
60 |
p = pwd.getpwnam(u) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
61 |
def become(): |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
62 |
os.setgid(p.pw_gid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
63 |
os.setegid(p.pw_gid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
64 |
os.setuid(p.pw_uid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
65 |
os.seteuid(p.pw_uid) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
66 |
return become |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
67 |
|
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
68 |
try: |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
69 |
pwd.getpwnam('hg') |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
70 |
except KeyError: |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
71 |
subprocess.check_call( |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
72 |
"adduser --system --shell /bin/sh --group --disabled-password".split() + |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
73 |
["--gecos", "Mercurial repositories", "hg"]) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
74 |
subprocess.check_call([dest + '/init/hginit'], preexec_fn = becomeFunc('hg')) |
fcb20d7593e6
Rewrite install script in Python
Paul Crowley <paul@lshift.net>
parents:
79
diff
changeset
|
75 |