annotate src/pkg.pl @ 12:e056798af879

fixing problem with shell interpretation.
author Robert McIntyre <rlm@mit.edu>
date Wed, 09 Jan 2013 07:09:37 +0000
parents a0c0ccd22ca5
children ac1ca422bd54
rev   line source
rlm@2 1 #!/usr/bin/env perl
rlm@2 2
rlm@3 3
rlm@3 4 #this is the root of the package users' homes
rlm@3 5 $pkg_home_root = "/pkg";
rlm@3 6
rlm@3 7
rlm@2 8 if ($ARGV[0] eq "--help"){
rlm@2 9 print <<"HERE";
rlm@2 10
rlm@2 11 pkg -- create a package user.
rlm@2 12
rlm@2 13 syntax:
rlm@2 14 pkg package-name description
rlm@2 15 pkg --help
rlm@3 16
rlm@2 17 Create a package user for the purpose of compiling
rlm@2 18 a particular package.
rlm@2 19
rlm@2 20 The user will be created with user and group both
rlm@2 21 equal to the name you specify.
rlm@2 22
rlm@2 23 You will then be put into the user's home
rlm@2 24 directory where you may proceed with
rlm@3 25 compiling/installing the package.
rlm@2 26
rlm@2 27 If the user already exists, this is equivalent to
rlm@3 28 su --login package-name
rlm@2 29
rlm@2 30 Written by Robert McIntyre. This software is free
rlm@2 31 software and is released to the public domain.
rlm@2 32
rlm@2 33 HERE
rlm@2 34 exit 0;
rlm@2 35 }
rlm@3 36 $" = " ";
rlm@2 37
rlm@2 38 $pkg_name = $ARGV[0];
rlm@2 39
rlm@2 40 $pkg_desc = $ARGV[1];
rlm@2 41
rlm@2 42 # Validate pkg_user as a user name.
rlm@3 43 if (!($pkg_name =~ m/^[a-z_][a-z0-9_-]*\$?$/)){
rlm@2 44 print "$pkg_name is not a valid user name!\n";
rlm@3 45 exit 1;
rlm@2 46 }
rlm@2 47
rlm@2 48 # Validate description.
rlm@2 49 if ($pkg_desc =~ m/:/){
rlm@2 50 print "Package Description cannot contain \":\"\n";
rlm@3 51 exit 1;
rlm@2 52 }
rlm@2 53
rlm@2 54
rlm@3 55 $pkg_home = "$pkg_home_root/$pkg_name";
rlm@2 56
rlm@3 57 #set default for $pkg_desc.
rlm@3 58 if (!($pkg_desc)){$pkg_desc = $pkg_name;}
rlm@2 59
rlm@3 60 @pkg_switch_cmd = ("su", "--login", $pkg_name);
rlm@3 61
rlm@3 62 @pkg_create_cmd =
rlm@3 63 ("useradd", "-c", $pkg_desc, "-d", $pkg_home,
rlm@3 64 "-g", $pkg_name, "-s", "/bin/bash",
rlm@3 65 $pkg_name);
rlm@3 66
rlm@3 67 @pkg_create_group_cmd =
rlm@3 68 ("groupadd", "--force", $pkg_name);
rlm@3 69
rlm@3 70 @pkg_create_home_cmd =
rlm@7 71 ("install", "-d", "-g", $pkg_name, "-o", $pkg_name,
rlm@9 72 "-m", "755", $pkg_home);
rlm@7 73
rlm@7 74 @pkg_add_install_cmd =
rlm@7 75 ("gpasswd", "--add", $pkg_name, "install");
rlm@3 76
rlm@7 77 @pkg_link_bashrc_cmd =
rlm@7 78 ("install", "-g", $pkg_name, "-o", $pkg_name,
rlm@8 79 "/pkg/defaults/.profile", "$pkg_home/.profile");
rlm@7 80
rlm@7 81 @pkg_copy_hg_wrapper_cmd =
rlm@12 82 (install, "-g", "hg-wheel", "-o", "hg-committer",
rlm@12 83 "-m", "6111", "/pkg/defaults/.hg-wrapper", $pkg_home);
rlm@12 84
rlm@12 85 $pkg_hgrc = "[ui]\n\
rlm@12 86 username = $pkg_name\n\
rlm@12 87 [extensions]\n\
rlm@12 88 hgext.purge =\n";
rlm@12 89
rlm@12 90 $pkg_hgrc_filename = "$pkg_home/.hgrc";
rlm@12 91
rlm@12 92 @pkg_set_hgrc_user_cmd =
rlm@12 93 ("chown", "$pkg_name:$pkg_name", $pkg_hgrc_filename);
rlm@12 94
rlm@12 95
rlm@12 96 sub execute{print "\t@_\n"; system(@_) and die $!;}
rlm@12 97
rlm@7 98
rlm@3 99 #determine if the user already exists:
rlm@3 100 `id $pkg_name 2>/dev/null`;
rlm@4 101 if (!$?){
rlm@4 102 print "Change user.\n";
rlm@4 103 execute(@pkg_switch_cmd); exit 0;}
rlm@3 104
rlm@3 105 print "Creating package group.\n";
rlm@3 106 execute(@pkg_create_group_cmd);
rlm@3 107
rlm@3 108 print "Creating package user.\n";
rlm@3 109 execute(@pkg_create_cmd);
rlm@3 110
rlm@3 111 print "Create home directory for $pkg_name.\n";
rlm@3 112 execute(@pkg_create_home_cmd);
rlm@3 113
rlm@7 114 print "Add $pkg_name to install group.\n";
rlm@7 115 execute(@pkg_add_install_cmd);
rlm@7 116
rlm@7 117 print "Copy Default Files.\n";
rlm@7 118 execute(@pkg_link_bashrc_cmd);
rlm@7 119 execute(@pkg_copy_hg_wrapper_cmd);
rlm@7 120
rlm@12 121 # print "Create ~/.hgrc\n";
rlm@12 122 # open(HGRC, ">$pkg_hgrc_filename") or die $!;
rlm@12 123 # select HGRC;
rlm@12 124 # print $pkg_hgrc;
rlm@12 125 # close(HGRC);
rlm@12 126
rlm@12 127 # select(STDOUT);
rlm@12 128 # print "Set permissions on ~/.hgrc.\n";
rlm@12 129 # execute(@pkg_set_hgrc_user_cmd);
rlm@12 130
rlm@3 131 print "Change user.\n";
rlm@3 132 execute(@pkg_switch_cmd);