scripts/lib.sh
author Tero Marttila <terom@fixme.fi>
Wed, 14 Dec 2011 01:10:41 +0200
changeset 4 bf9d63195f9d
parent 1 51b1db97f448
child 7 ab661ceed4dc
permissions -rw-r--r--
preseed: add vim; host.cfg (exim4 - configs still unclear)
1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
## library functions
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
function die () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
    echo "!!! $@" >&2
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
    exit 1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
# Execute command verbosely, and exit on failure
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
function cmd () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    echo ">>> $@"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    [ $_MOCK ] && return 0
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    eval "$@" # return $?
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
function expand_MB () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    local size=${1^}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    case ${size: -1} in 
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        G)
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
            size=$(( ${size%G} * 1024))
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
            ;;
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    esac
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    echo $size
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
function extract_iso () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    iso=$1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    dst=$2
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    [ ! -r "$iso" ] && die "Given .iso is not readable: $iso"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    [ -z "$dst" ] && die "Must give destination: $dst"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    [ -e "$dst" ] && die "Given destination already exists: $dst"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    # temporary mount
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    mnt=$(mktemp -d mnt.XXXX)
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    # clean on exit
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    function cleanup () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        if mountpoint -q $mnt; then
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
           sudo umount $mnt
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        fi
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        [ -d $mnt ] && rmdir $mnt
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        return $1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    }
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    # loop-mount
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    cmd sudo mount -o loop $iso $mnt || cleanup 1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    # copy
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    cmd cp -r $mnt $dst || cleanup 1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    # done, cleanup
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
    cleanup 0
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
function my_md5sum () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    /usr/bin/md5sum $1 | (
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
        read md5sum path
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        echo $md5sum
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    )
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
function expand_template () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    local tpl=$1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    local out=$2
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    local linecount=0
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    # read in each line at a time
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
    while IFS='' read -r line; do
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        linecount=$((linecount + 1))
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
        if [ "${line:0:1}" == "#" ]; then
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
            # ignore comments; pass through as-is
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
            echo "$line"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
        
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
        else
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
            # evaluate {...} expressions
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
            # a slight hack, but it works \o/
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
            # http://stackoverflow.com/questions/415677/how-to-replace-placeholders-in-a-text-file/7633579#7633579
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
            line="${line//\\/\\\\}"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
            line="${line//\"/\\\"}"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
            line="${line//\`/\\\`}"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
            line="${line//\$/\\\$}"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
            line="${line//{/\${}"   # This is just for vim: } "
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
            # echo "($line)" >&2
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
            (eval "echo \"$line\"") || die "Error at $tpl:$linecount: $line"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
        fi
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
 
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    done < $tpl > $out
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
# Recursive expand_template files from src -> dst
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
# XXX: not used
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
function expand_tree () {
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    local src=$1
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
    local dst=$2
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    local filter=${3:-'*'}
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
    for path in ${src}/${filter}; do
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        local name=$(basename $path)
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
        local target=$dst/$name
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
        if [ -d $path ]; then
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
            echo "expand_tree: $path -> $target"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
            echo "expand_tree $path $target $filter"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
        elif [ -f $path ]; then
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
            echo "expand_file: $path -> $target"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
            echo "expand_file $path $target"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
        else
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
            echo "XXX: ignore weird file: $path"
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        fi
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
    done
51b1db97f448 yay customized preseeds + functional pkvlm-create
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
}