Changeset 465
- Timestamp:
- 10/12/2009 22:00:53 (3 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
confaudit.in (modified) (2 diffs)
-
confman.in (modified) (54 diffs)
-
confmanlib.sh.in (modified) (4 diffs)
-
confsync.in (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/confaudit.in
r437 r465 61 61 fi 62 62 63 conf_lock_system 63 system_lock=$(conf_lock_system) 64 64 65 65 if $sleep_mode; then … … 128 128 echo "Audit operation finished successfully" | conf_logger 129 129 130 conf_unlock_system 130 conf_unlock_system $system_lock 131 131 132 132 rm -rf $tmproot -
trunk/confman.in
r464 r465 57 57 function setup { 58 58 local response 59 local wcopy_lock 59 60 60 61 if conf_wcopy_is_locked; then … … 78 79 else 79 80 mkdir -p ${WORK_PATH} 80 conf_lock_wcopy81 wcopy_lock=$(conf_lock_wcopy) 81 82 conf_checkout_tree 82 conf_unlock_wcopy 83 conf_unlock_wcopy $wcopy_lock 83 84 fi 84 85 fi … … 86 87 87 88 function create { 89 local wcopy_lock 88 90 if [ -z "$*" ] ; then 89 91 print_usage 1 90 92 else 91 conf_lock_wcopy93 wcopy_lock=$(conf_lock_wcopy) 92 94 conf_create_modules "$@" || exit 1 93 conf_unlock_wcopy 95 conf_unlock_wcopy $wcopy_lock 94 96 fi 95 97 } 96 98 97 99 function update { 98 conf_lock_wcopy 100 local wcopy_lock 101 wcopy_lock=$(conf_lock_wcopy) 99 102 conf_update_tree "$@" || exit 1 100 conf_unlock_wcopy 103 conf_unlock_wcopy $wcopy_lock 101 104 } 102 105 103 106 function revert { 107 local wcopy_lock 104 108 if [ -z "$*" ] ; then 105 109 print_usage 1 106 110 else 107 conf_lock_wcopy111 wcopy_lock=$(conf_lock_wcopy) 108 112 conf_revert "$@" 109 conf_unlock_wcopy 113 conf_unlock_wcopy $wcopy_lock 110 114 fi 111 115 } … … 188 192 local nocommit=true 189 193 local opt OPTIND OPTARG 194 local wcopy_lock system_lock 190 195 191 196 while getopts ":m:F:" opt ; do … … 203 208 204 209 conf_require_recipe 205 conf_lock_system206 conf_lock_wcopy210 system_lock=$(conf_lock_system) 211 wcopy_lock=$(conf_lock_wcopy) 207 212 208 213 for module in $(conf_get_recipe) ; do … … 235 240 echo "Commit operation finished successfully" >&2 236 241 rm -f $msg 237 conf_unlock_wcopy 238 conf_unlock_system 242 conf_unlock_wcopy $wcopy_lock 243 conf_unlock_system $system_lock 239 244 } 240 245 … … 242 247 function inst { 243 248 local file livefile 244 local msg status files file 249 local msg status files file sing 245 250 local nocommit=true 251 local system_lock wcopy_lock 246 252 local opt OPTIND OPTARG 247 253 … … 250 256 m) LOG_MESSAGE="$OPTARG"; LOG_MESSAGE_SET="true" ;; 251 257 F) LOG_FILE="$OPTARG" ;; 258 N) innercall=true ;; 252 259 *) echo "Invalid option '-${OPTARG}'." >&4 253 260 print_usage 1 … … 257 264 shift $(($OPTIND - 1)) 258 265 266 system_lock=$(conf_lock_system) 267 wcopy_lock=$(conf_lock_wcopy) 259 268 conf_require_recipe 260 conf_lock_wcopy261 conf_lock_system262 269 263 270 for file in "$@"; do … … 265 272 done 266 273 267 268 274 $SUDO ${SUDO:+-v} 269 conf_update_tree || conf_cleanExit 270 271 if status=$(get_status $files) ; then 272 nocommit=false 273 msg=$(get_log "$status") || conf_cleanExit 274 rm -f "$status" 275 fi 276 277 echo "Installation operation started." >&2 278 $nocommit || conf_commit_file "$msg" "$files" || return $? 279 for layer in $(conf_get_recipe) ; do 280 conf_install $layer "$@" 281 done 282 for file in $SINGULARITIES ; do 283 conf_assemble_sing $file || conf_cleanExit 275 276 # This stuff we only do in the top-level call, not on recursive calls... 277 if ! conf_lock_is_recursive $wcopy_lock ; then 278 conf_update_tree || conf_cleanExit 279 if status=$(get_status $files) ; then 280 nocommit=false 281 msg=$(get_log "$status") || conf_cleanExit 282 rm -f "$status" 283 fi 284 echo "Installation operation started." >&2 285 $nocommit || conf_commit_file "$msg" "$files" || return $? 286 fi 287 288 for file in "$@" ; do 289 for layer in $(conf_get_recipe) ; do 290 conf_install $layer "$@" 291 done 292 for sing in $SINGULARITIES ; do 293 if [ "$sing" = "$file" ] ; then 294 conf_assemble_sing $file || conf_cleanExit 295 fi 296 done 284 297 done 285 298 conf_recordAction install … … 289 302 fi 290 303 echo "Installation operation succeeded." >&2 291 conf_unlock_wcopy 292 conf_unlock_system 304 conf_unlock_wcopy $wcopy_lock 305 conf_unlock_system $system_lock 293 306 } 294 307 295 308 296 309 function import { 297 local recursive_lock 298 299 # A placeholder to track the first recursive call for the final unlock 300 if conf_wcopy_is_locked ; then 301 recursive_lock=1 302 conf_debug import called with lock already held 303 else 304 recursive_lock=0 305 conf_debug import called without lock 306 fi 310 local wcopy_lock 307 311 308 312 local item OPTIND flags … … 330 334 shift 331 335 336 wcopy_lock=$(conf_lock_wcopy) 337 332 338 if [ -z "$module" ] || [ -z "$1" ] ; then 333 if [ "$recursive_lock" -eq "0" ]; then339 if ! conf_lock_is_recursive $wcopy_lock ; then 334 340 print_usage 1 335 341 return 1 … … 342 348 return 1 343 349 fi 344 345 conf_lock_wcopy346 350 347 351 $SUDO ${SUDO:+-v} … … 364 368 "Skipping." >&4 365 369 import $flags $module "$@" 366 conf_unlock_wcopy $ recursive_lock370 conf_unlock_wcopy $wcopy_lock 367 371 return 368 372 fi … … 375 379 echo "Did you mean -f ?" >&4 376 380 import $flags $module "$@" 377 conf_unlock_wcopy $ recursive_lock381 conf_unlock_wcopy $wcopy_lock 378 382 return 379 383 fi … … 442 446 443 447 import $flags $module "$@" 444 conf_unlock_wcopy $ recursive_lock448 conf_unlock_wcopy $wcopy_lock 445 449 return 446 450 else … … 490 494 fi 491 495 492 conf_unlock_wcopy $ recursive_lock496 conf_unlock_wcopy $wcopy_lock 493 497 } 494 498 495 499 function remove { 500 local wcopy_lock 496 501 if [ -z $1 ]; then 497 502 print_usage 1 498 503 fi 499 504 500 conf_lock_wcopy505 wcopy_lock=$(conf_lock_wcopy) 501 506 conf_rm_file "$@" 502 conf_unlock_wcopy 507 conf_unlock_wcopy $wcopy_lock 503 508 } 504 509 … … 511 516 local comment="dir" 512 517 local workdir=`$ABSPATH .` 513 514 local recursive_lock 515 516 # A placeholder to track the first recursive call for the final unlock 517 if conf_wcopy_is_locked ; then 518 recursive_lock=1 519 else 520 recursive_lock=0 521 fi 518 local wcopy_lock 522 519 523 520 if [ -z "$dir" ] ; then … … 525 522 fi 526 523 527 conf_lock_wcopy524 wcopy_lock=$(conf_lock_wcopy) 528 525 # Find the "real" directory's path if not already specified 529 526 if [[ ! $dir =~ ^/ ]] ; then … … 572 569 done 573 570 574 if [ "$recursive_lock" -eq 0 ]; then 575 conf_unlock_wcopy 576 fi 571 conf_unlock_wcopy $wcopy_lock 577 572 } 578 573 … … 602 597 603 598 function chowner { 604 local recursive_lock owner file 605 606 # A placeholder to track the first recursive call for the final unlock 607 if conf_wcopy_is_locked ; then 608 recursive_lock=1 609 else 610 recursive_lock=0 611 fi 599 local owner file wcopy_lock 612 600 613 601 local recursive item OPTIND … … 627 615 file=$2 628 616 629 conf_lock_wcopy617 wcopy_lock=$(conf_lock_wcopy) 630 618 conf_set_prop $file owner $owner 631 619 … … 636 624 fi 637 625 638 if [ "$recursive_lock" -eq 0 ]; then 639 conf_unlock_wcopy 640 fi 626 conf_unlock_wcopy $wcopy_lock 641 627 } 642 628 643 629 function chgroup { 644 local recursive_lock group file 645 646 # A placeholder to track the first recursive call for the final unlock 647 if conf_wcopy_is_locked ; then 648 recursive_lock=1 649 else 650 recursive_lock=0 651 fi 630 local group file wcopy_lock 652 631 653 632 local recursive item OPTIND … … 667 646 file=$2 668 647 669 conf_lock_wcopy648 wcopy_lock=$(conf_lock_wcopy) 670 649 conf_set_prop $file group $group 671 650 … … 676 655 fi 677 656 678 if [ "$recursive_lock" -eq 0 ]; then 679 conf_unlock_wcopy 680 fi 657 conf_unlock_wcopy $wcopy_lock 681 658 } 682 659 683 660 function chmode { 684 local recursive item OPTIND mode file 685 686 # A placeholder to track the first recursive call for the final unlock 687 if conf_wcopy_is_locked ; then 688 recursive_lock=1 689 else 690 recursive_lock=0 691 fi 661 local recursive item OPTIND mode file wcopy_lock 692 662 693 663 while getopts "R" opt ; do … … 706 676 file=$2 707 677 708 conf_lock_wcopy678 wcopy_lock=$(conf_lock_wcopy) 709 679 conf_set_prop $file mode $mode 710 680 if [ ! -z $recursive ] && [ -d $file ] ; then … … 714 684 fi 715 685 716 if [ "$recursive_lock" -eq 0 ]; then 717 conf_unlock_wcopy 718 fi 686 conf_unlock_wcopy $wcopy_lock 719 687 } 720 688 721 689 function chcom { 722 conf_lock_wcopy690 local wcopy_lock 723 691 local comment="$1" 724 692 local file=$2 693 wcopy_lock=$(conf_lock_wcopy) 725 694 conf_set_prop $file comment "$comment" 726 conf_unlock_wcopy 695 conf_unlock_wcopy $wcopy_lock 727 696 } 728 697 … … 730 699 local symlink="$1" 731 700 local file="$2" 701 local wcopy_lock 732 702 733 703 if [ $# -lt 2 ] ; then … … 735 705 fi 736 706 737 conf_lock_wcopy707 wcopy_lock=$(conf_lock_wcopy) 738 708 conf_set_prop "$file" symlink "$symlink" 739 conf_unlock_wcopy 709 conf_unlock_wcopy $wcopy_lock 740 710 } 741 711 … … 755 725 local module=$1 756 726 local checkpoint=$2 727 local wcopy_lock 757 728 if [ -z $2 ] ; then 758 729 print_usage 1 759 730 else 760 conf_lock_wcopy731 wcopy_lock=$(conf_lock_wcopy) 761 732 conf_new_checkpoint $module $checkpoint 762 conf_unlock_wcopy 733 conf_unlock_wcopy $wcopy_lock 763 734 fi 764 735 } … … 767 738 local module=$1 768 739 local checkpoint=$2 740 local wcopy_lock 769 741 if [ -z $2 ] ; then 770 742 print_usage 1 771 743 else 772 conf_lock_wcopy744 wcopy_lock=$(conf_lock_wcopy) 773 745 conf_rm_checkpoint $module $checkpoint 774 conf_unlock_wcopy 746 conf_unlock_wcopy $wcopy_lock 775 747 fi 776 748 } … … 780 752 local checkpoint=$2 781 753 local clock=$3 754 local wcopy_lock system_lock 782 755 783 756 if [ -z "$2" ] ; then … … 785 758 else 786 759 conf_require_recipe 787 conf_lock_wcopy788 conf_lock_system760 wcopy_lock=$(conf_lock_wcopy) 761 system_lock=$(conf_lock_system) 789 762 echo "Rolling $module back to $checkpoint $clock" >&2 790 763 conf_rollback $module $checkpoint $clock || conf_cleanExit … … 798 771 done 799 772 echo "Rollback succeeded." >&2 800 conf_unlock_wcopy 801 conf_unlock_system 773 conf_unlock_wcopy $wcopy_lock 774 conf_unlock_system $system_lock 802 775 fi 803 776 } 804 777 805 778 function rmmod { 779 local wcopy_lock 806 780 if [ -z "$*" ] ; then 807 781 print_usage 1 808 782 else 809 conf_lock_wcopy783 wcopy_lock=$(conf_lock_wcopy) 810 784 conf_remove_modules "$@" || exit 1 811 conf_unlock_wcopy 785 conf_unlock_wcopy $wcopy_lock 812 786 fi 813 787 } … … 816 790 local oldmod=$1 817 791 local newmod=$2 792 local wcopy_lock 818 793 if [ -z $newmod ] ; then 819 794 print_usage 1 … … 827 802 conf_cleanExit 828 803 fi 829 conf_lock_wcopy804 wcopy_lock=$(conf_lock_wcopy) 830 805 conf_rename $oldmod $newmod 831 conf_unlock_wcopy 806 conf_unlock_wcopy $wcopy_lock 832 807 } 833 808 … … 843 818 local src=$1 844 819 local dest=$2 820 local wcopy_lock 845 821 if [ -z $2 ]; then 846 822 print_usage 1 847 823 fi 848 conf_lock_wcopy824 wcopy_lock=$(conf_lock_wcopy) 849 825 conf_cp $src $dest 850 conf_unlock_wcopy 826 conf_unlock_wcopy $wcopy_lock 851 827 } 852 828 … … 854 830 local src=$1 855 831 local dest=$2 832 local wcopy_lock 856 833 if [ -z $2 ] 857 834 then 858 835 print_usage 1 859 836 fi 860 conf_lock_wcopy837 wcopy_lock=$(conf_lock_wcopy) 861 838 conf_mv $src $dest 862 conf_unlock_wcopy 839 conf_unlock_wcopy $wcopy_lock 863 840 } 864 841 … … 879 856 local target=$1 880 857 local link=$2 881 conf_lock_wcopy 858 local wcopy_lock 859 wcopy_lock=$(conf_lock_wcopy) 882 860 conf_ln $target $link $forced 883 conf_unlock_wcopy 861 conf_unlock_wcopy $(wcopy_lock) 884 862 } 885 863 … … 898 876 shift 899 877 if [ -z "$1" ] ; then print_usage 1 ; fi 900 901 conf_lock_wcopy 878 local wcopy_lock 879 880 wcopy_lock=$(conf_lock_wcopy) 902 881 conf_chattr "$attr" "$value" "$@" 903 conf_unlock_wcopy 882 conf_unlock_wcopy $(wcopy_lock) 904 883 } 905 884 … … 907 886 local attr="$1" 908 887 shift 888 local wcopy_lock 909 889 if [ -z "$1" ] ; then print_usage 1 ; fi 910 890 911 conf_lock_wcopy891 wcopy_lock=$(conf_lock_wcopy) 912 892 conf_rmattr "$attr" "$@" 913 conf_unlock_wcopy 893 conf_unlock_wcopy $wcopy_lock 914 894 } 915 895 … … 923 903 924 904 function audit { 905 local wcopy_lock system_lock 925 906 if [ -z "$*" ] ; then 926 907 conf_require_recipe 927 conf_lock_system928 conf_lock_wcopy908 system_lock=$(conf_lock_system) 909 wcopy_lock=$(conf_lock_wcopy) 929 910 local tmproot=$(conf_tmp_dir) 930 911 local live_root="${LIVE_ROOT}" … … 945 926 $SUDO diff -ru ${live_root}/ $tmproot | grep -v "^Only in" 946 927 echo "Audit operation finished successfully" >&2 947 conf_unlock_wcopy 948 conf_unlock_system 928 conf_unlock_wcopy $wcopy_lock 929 conf_unlock_system $system_lock 949 930 $SUDO rm -rf $tmproot 950 931 else … … 954 935 955 936 function recipe_edit { 956 local recipe 937 local recipe wcopy_lock 957 938 local new_recipe_file recipe_file 958 939 local repeat msg status … … 974 955 if [ -z "$1" ] ; then print_usage 1 ; fi 975 956 976 conf_lock_wcopy957 wcopy_lock=$(conf_lock_wcopy) 977 958 recipe="$1" 978 959 recipe_file=$(conf_recipe_dir)/${recipe} … … 997 978 fi 998 979 rm -f "$new_recipe_file" 999 conf_unlock_wcopy 980 conf_unlock_wcopy $wcopy_lock 1000 981 } 1001 982 1002 983 function recipe_create { 1003 local recipe recipe_file opt OPTIND msg status 984 local recipe recipe_file opt OPTIND msg status wcopy_lock 1004 985 while getopts ":m:F:R:" opt ; do 1005 986 case $opt in … … 1020 1001 fi 1021 1002 1022 conf_lock_wcopy1003 wcopy_lock=$(conf_lock_wcopy) 1023 1004 recipe_file=$(conf_recipe_dir)/${recipe} 1024 1005 conf_recipe_create "$recipe" || return 1 … … 1027 1008 if ! recipe_edit "$recipe" ; then 1028 1009 conf_rm_file --force "${new_recipe_file}" 1029 conf_unlock_wcopy 1010 conf_unlock_wcopy $wcopy_lock 1030 1011 return 1 1031 1012 fi 1032 conf_unlock_wcopy 1013 conf_unlock_wcopy $wcopy_lock 1033 1014 return 0 1034 1015 fi … … 1040 1021 conf_commit_recipe "$msg" "$recipe" 1041 1022 fi 1042 conf_unlock_wcopy 1023 conf_unlock_wcopy $wcopy_lock 1043 1024 return 0 1044 1025 else 1045 1026 conf_rm_file --force "${recipe_file}" 1046 conf_unlock_wcopy 1027 conf_unlock_wcopy $wcopy_lock 1047 1028 return 1 1048 1029 fi … … 1051 1032 function recipe_remove { 1052 1033 local opt OPTIND OPTARG 1053 local msg status recipes recipe 1034 local msg status recipes recipe wcopy_lock 1054 1035 local nocommit=true 1055 1036 while getopts ":m:F:" opt ; do … … 1064 1045 shift $(($OPTIND - 1)) 1065 1046 1066 conf_lock_wcopy1047 wcopy_lock=$(conf_lock_wcopy) 1067 1048 1068 1049 conf_remove_recipes "$@" || exit 1 … … 1080 1061 $nocommit || conf_commit_recipes "$msg" "$@" 1081 1062 1082 conf_unlock_wcopy 1063 conf_unlock_wcopy $wcopy_lock 1083 1064 } 1084 1065 … … 1091 1072 1092 1073 function recipe_set { 1074 local wcopy_lock system_lock 1093 1075 if [ -z "$1" ] ; then print_usage 1 ; fi 1094 1076 local recipe="$1" … … 1097 1079 exit 1 1098 1080 fi 1099 conf_lock_wcopy1100 conf_lock_system1081 wcopy_lock=$(conf_lock_wcopy) 1082 system_lock=$(conf_lock_system) 1101 1083 conf_set_recipe "$recipe" 1102 conf_unlock_system 1103 conf_unlock_wcopy 1084 conf_unlock_system $system_lock 1085 conf_unlock_wcopy $wcopy_lock 1104 1086 } 1105 1087 -
trunk/confmanlib.sh.in
r464 r465 131 131 132 132 function conf_lock_wcopy { 133 local locktype 133 134 conf_require_wcopy 134 ${LOCK} lock $$ $(conf_wcopy_lockfile) || exit 1 135 136 # If this process already has a lock on the wcopy 137 if conf_wcopy_is_locked; then 138 locktype="RECURSIVE" 139 else 140 locktype="ORIGINAL" 141 fi 142 143 ${LOCK} lock $$ $(conf_wcopy_lockfile) || die 135 144 WCOPY_DIRTY="true" 145 echo $locktype 136 146 } 137 147 138 148 function conf_unlock_wcopy { 139 local recursive_lock="$1" 140 141 # Don't release the lock if it was grabbed recursively 142 [ -n "$recursive_lock" ] && [ "$recursive_lock" = "1" ] && return 143 144 ${LOCK} unlock $$ $(conf_wcopy_lockfile) 149 local locktype="$1" 150 151 if [ "$locktype" = "RECURSIVE" ] ; then 152 return 0 153 elif [ "$locktype" = "ORIGINAL" ] ; then 154 ${LOCK} unlock $$ $(conf_wcopy_lockfile) 155 return $? 156 else 157 echo "Invalid lock type in conf_unlock_wcopy" >&4 158 die 159 fi 145 160 } 146 161 … … 150 165 151 166 function conf_lock_system { 152 ${SUDO} ${LOCK} lock $$ "$LOCKFILE" || exit 1 167 local locktype 168 169 # If this process already has a lock on the wcopy 170 if conf_system_is_locked; then 171 locktype="RECURSIVE" 172 else 173 locktype="ORIGINAL" 174 fi 175 176 ${SUDO} ${LOCK} lock $$ "$LOCKFILE" || die 177 echo $locktype 153 178 } 154 179 155 180 function conf_unlock_system { 156 ${SUDO} ${LOCK} unlock $$ "$LOCKFILE" 181 local locktype="$1" 182 183 if [ "$locktype" = "RECURSIVE" ] ; then 184 return 0 185 elif [ "$locktype" = "ORIGINAL" ] ; then 186 ${SUDO} ${LOCK} unlock $$ "$LOCKFILE" 187 return $? 188 else 189 echo "Invalid lock type in conf_unlock_system" >&2 190 die 191 fi 157 192 } 158 193 159 194 function conf_system_is_locked { 160 195 ${LOCK} haslock $$ "$LOCKFILE" 196 } 197 198 function conf_lock_is_recursive { 199 local locktype="$1" 200 case "$locktype" in 201 ORIGINAL) return 1;; 202 RECURSIVE) return 0;; 203 *) echo "Invalid lock type in conf_lock_is_recursive" >&2 204 die 205 ;; 206 esac 161 207 } 162 208 … … 1058 1104 echo "Received a signal. Exiting cleanly." | conf_logger 1059 1105 echo "Please wait until I finish cleaning up after you." >&4 1060 conf_cleanExit 1106 conf_cleanExit 1 1061 1107 } 1062 1108 … … 1070 1116 1071 1117 conf_debug "Removing any system or working copy locks..." >&4 1072 conf_wcopy_is_locked && conf_unlock_wcopy 1073 conf_system_is_locked && conf_unlock_system 1118 conf_wcopy_is_locked && conf_unlock_wcopy ORIGINAL 1119 conf_system_is_locked && conf_unlock_system ORIGINAL 1074 1120 1075 1121 # And this clears any locks we may have created on our working copy: -
trunk/confsync.in
r437 r465 64 64 fi 65 65 66 conf_lock_system 66 system_lock=$(conf_lock_system) 67 67 68 68 if $sleep_mode; then … … 143 143 echo "Sync operation finished successfully" | conf_logger 144 144 145 conf_unlock_system 145 conf_unlock_system $system_lock 146 146 147 147 rm -rf $tmpdir
Note: See TracChangeset
for help on using the changeset viewer.
