]> git.uio.no Git - python-TSD.git/blame - bin/tsd-projectdir-setup
import_alt and export_alt directories are now created and logged
[python-TSD.git] / bin / tsd-projectdir-setup
CommitLineData
7f1d9fe9
PR
1#!/bin/sh
2#
3# Fix permissions on a freshly created project directory. Assume the
4# path is /tsd/pXX, and all project members are member of the file
5# group pXX-member. This setup assume all project members have umask
6# 00X (as in 002 or 005).
7
8set -e
9
10if [ ! "$1" ] ; then
11 cat <<EOF
12Usage: $0 <path-to-project-dir> [<path-to-project-dir> ...]
13EOF
14 exit 1
15fi
16
5f2921c2
PR
17infomsg() {
18 if [ -t 0 ] ; then
19 echo "info:" "$@"
20 fi
21}
4a6120a9
PR
22logmsg() {
23 if [ -t 0 ] ; then
24 echo "info:" "$@"
25 else
26 logger -t tsd-projectdir-setup info: "$@"
27 fi
28}
5f2921c2
PR
29errormsg() {
30 if [ -t 0 ] ; then
31 echo "error:" "$@"
32 else
33 logger -t tsd-projectdir-setup error: "$@"
34 fi
35}
36
37groupexist() {
38 if getent group $1 > /dev/null ; then
39 true
40 else
5f2921c2
PR
41 false
42 fi
43}
44
7f1d9fe9
PR
45setup_projectdir() {
46 pdir="$1"
47 pnum=$(echo $pdir|cut -d/ -f3)
48 group=$pnum-member-group
49 agroup=$pnum-admin-group
50 egroup=$pnum-export-group
b39d54b7 51 igroup=$pnum-import-group
1c25782c 52 vgroup=$pnum-vidyo-group
7f1d9fe9
PR
53 cd "$pdir"
54 mkdir -p "home"
55 mkdir -p "fx/export"
56 mkdir -p "fx/import"
57 mkdir -p "data/durable"
58 mkdir -p "data/no-backup"
e0d1c094
DES
59 chown root:$group . home fx data
60 chmod 750 . home fx data
19e745b8
PR
61 chmod 2770 fx/export fx/import data/durable data/no-backup
62 if ! groupexist $group || ! groupexist $egroup || ! groupexist $igroup ; then
38ad4ce8 63 errormsg "unable to find needed groups, can not to set up $pdir"
19e745b8
PR
64 return 1
65 fi
66 infomsg "updating file permissions for $pdir"
b39d54b7 67 chown root:$group data/durable data/no-backup
7f1d9fe9 68 chown root:$egroup fx/export
b39d54b7 69 chown root:$igroup fx/import
37e32faa
PR
70
71 if getent netgroup $pnum-hpc-user-group > /dev/null 2>&1 ; then
a9bf00f6
PR
72 chmod 2770 data/colossus
73 chown root:$group data/colossus
37e32faa
PR
74 elif [ -d data/colossus ] ; then
75 errormsg "project $pnum have data/colossus but lack $pnum-hpc-user-group"
76 fi
77
8dbe5a68 78 if getent netgroup $pnum-fx-alt-group > /dev/null 2>&1 ; then
73550969
VK
79 if ! [ -d "fx/export_alt" -a -d "fx/import_alt" ] ; then
80 mkdir -p "fx/export_alt"
81 mkdir -p "fx/import_alt"
82 logmsg "created import_alt and export_alt directories for project $pnum"
83 fi
84
8dbe5a68
PR
85 chown root:$egroup fx/export_alt
86 chmod 2770 fx/export_alt
87 chown root:$igroup fx/import_alt
88 chmod 2770 fx/import_alt
a9bf00f6 89 fi
b39d54b7 90
1c25782c
VK
91 if getent group $vgroup > /dev/null 2>&1 ; then
92 if [ ! -d "${pdir}/fx/import_alt/vidyo" ]; then
93 mkdir -pm 2770 fx/import_alt/vidyo
94 chown root:$vgroup fx/import_alt/vidyo
73550969 95 logmsg "created vidyo directory for project $pnum"
1c25782c
VK
96 fi
97 fi
98
5f2921c2 99 if true ; then
b39d54b7 100 for u in $(getent group $group | cut -d: -f4- | tr , " "); do
95ed9618
PR
101 home=home/$u
102 if [ ! -d $home ] ; then
5f2921c2
PR
103 infomsg "trying to create home directory for $u"
104 if groupexist $u-group \
105 && mkdir $home.new \
106 && chown $u $home.new \
671d1eb8 107 && chmod 700 $home.new \
5f2921c2
PR
108 && chgrp -f $u-group $home.new \
109 ; then
110 mv $home.new $home
4a6120a9
PR
111 pwd="$(pwd)"
112 logmsg "created home for $u in $pwd/$home"
5f2921c2 113 else
38ad4ce8 114 errormsg "creating home directory for user $u failed"
5f2921c2
PR
115 if [ -d $home.new ] ; then
116 rmdir $home.new
117 fi
118 fi
95ed9618 119 fi
b39d54b7
PR
120 done
121 fi
7f1d9fe9
PR
122 return 0
123}
124
95b67337
PR
125setup_project_sharedir() {
126 pdir="$1"
70b78977 127 pnum=$(echo $pdir|cut -d/ -f3|sed 's/^\(p[0-9]*\).*/\1/')
95b67337
PR
128 group=$pnum-member-group
129 cd $pdir
130 mkdir -p data/durable
131 mkdir -p data/no-backup
132
133 chown root:$group . data
134 chmod 755 . data
135 chmod 2775 data/durable data/no-backup
136 if ! groupexist $group ; then
38ad4ce8 137 errormsg "unable to find needed group $group, can not to set up $pdir as sharedir"
95b67337
PR
138 return 1
139 fi
140 infomsg "updating project share file permissions for $pdir"
141 chown root:$group data/durable data/no-backup
142}
143
5e0a7155
PR
144# Split disk volumes can not have files on the top level. Move flag
145# files to subdirectory data/durable/projectinfo/ because of this.
f29adccb
PR
146flagpresent() {
147 pdir="$1"
148 flag="$2"
149 if [ -e "$pdir/$flag" ]\
150 || [ -e "$pdir/data/durable/projectinfo/$flag" ] ; then
151 return 0
152 fi
153 return 1
154}
155
7f1d9fe9
PR
156while [ "$1" ] ; do
157 pdir="$1"
158 shift
b39d54b7 159 if [ -d "$pdir" ] ; then
f29adccb
PR
160 if [ -d "$pdir/data/durable" ] ; then
161 if flagpresent "$pdir" "migration-override" ; then
162 errormsg "$pdir/migration-override exist, ignoring project disk"
163 elif flagpresent "$pdir" "project-share" ; then
164 setup_project_sharedir "$pdir" || true
165 else
166 setup_projectdir "$pdir" || true
167 fi
42501836 168 else
37e32faa 169 errormsg "missing data/durable in $pdir, skipping partition"
42501836 170 fi
b39d54b7 171 else
5f2921c2 172 errormsg "unable to find directory $pdir"
b39d54b7 173 fi
7f1d9fe9 174done