postinst is in cloud-init 0.6.3-0ubuntu1.
This file is a maintainer script. It is executed when installing (*inst) or removing (*rm) the package.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | #!/bin/sh -e
. /usr/share/debconf/confmodule
set -f # disable pathname expansion
db_capb escape # to support carriage return / multi-line values
update_cfg() {
# takes filename, header, new object (in yaml), optionally 'remover'
# and merges new into existing object in filename, and then updates file
# remover a string that means "delete existing entry"
python -c '
import sys, yaml
def update(src, cand):
if not (isinstance(src, dict) and isinstance(cand, dict)):
return cand
for k, v in cand.iteritems():
# if the candidate has _ as value, delete source
if v == REMOVER:
if k in src:
del src[k]
continue
if k not in src:
src[k] = v
else:
src[k] = update(src[k], v)
return src
(fname, header, newyaml) = sys.argv[1:4]
REMOVER = object
if len(sys.argv) == 5:
REMOVER = sys.argv[4]
newcfg = yaml.load(newyaml)
with open(fname, "r") as fp:
cfg = yaml.load(fp)
if not cfg: cfg = {}
cfg = update(cfg, newcfg)
with open(fname, "w") as fp:
fp.write(header + "\n")
fp.write(yaml.dump(cfg))' "$@"
}
handle_preseed_maas() {
local cfg_file="/etc/cloud/cloud.cfg.d/90_dpkg_maas.cfg"
local md_url="" creds_all="" c_key="" t_key="" t_sec="" c_sec="";
db_get "cloud-init/maas-metadata-url" && md_url="$RET" || :
db_get "cloud-init/maas-metadata-credentials" && creds_all="$RET" || :
# nothing to do
[ -n "$md_url" -o -n "$creds_all" ] || return 0
# change a url query string format into : delimited
if [ -n "$creds_all" -a "${creds_all#*&}" != "${creds_all}" ]; then
creds_all=$(python -c 'from urlparse import parse_qs; import sys;
keys = parse_qs(sys.argv[1])
for k in sys.argv[2:]:
sys.stdout.write("%s:" % keys.get(k,[""])[0])' "$creds_all" \
oauth_consumer_key oauth_token_key oauth_token_secret
)
fi
# now, if non-empty creds_all is: consumer_key:token_key:token_secret
if [ -n "$creds_all" ]; then
OIFS="$IFS"; IFS=:; set -- $creds_all; IFS="$OIFS"
c_key=$1; t_key=$2; t_sec=$3
fi
if [ "$md_url" = "_" -a "${c_key}:${t_key}:${t_sec}" = "_:_:_" ]; then
# if all these values were '_', the delete value, just delete the file.
rm -f "$cfg_file"
else
local header="# written by cloud-init debian package per preseed entries
# cloud-init/{maas-metadata-url,/maas-metadata-credentials}"
local pair="" k="" v="" pload="" orig_umask=""
for pair in "metadata_url:$md_url" "consumer_key:${c_key}" \
"token_key:${t_key}" "token_secret:$t_sec"; do
k=${pair%%:*}
v=${pair#${k}:}
[ -n "$v" ] && pload="${pload} $k: \"$v\","
done
# '_' would indicate "delete", otherwise, existing entries are left
orig_umask=$(umask)
umask 066
: >> "$cfg_file" && chmod 600 "$cfg_file"
update_cfg "$cfg_file" "$header" "datasource: { MAAS: { ${pload%,} } }" _
umask ${orig_umask}
fi
# now clear the database of the values, as they've been consumed
db_unregister "cloud-init/maas-metadata-url" || :
db_unregister "cloud-init/maas-metadata-credentials" || :
}
handle_preseed_local_cloud_config() {
local ccfg="" debconf_name="cloud-init/local-cloud-config"
local cfg_file="/etc/cloud/cloud.cfg.d/90_dpkg_local_cloud_config.cfg"
local header="# written by cloud-init debian package per preseed entry
# $debconf_name"
db_get "${debconf_name}" && ccfg="$RET" || :
if [ "$ccfg" = "_" ]; then
rm -f "$cfg_file"
elif [ -n "$ccfg" ]; then
{ echo "$header"; echo "$ccfg"; } > "$cfg_file"
fi
db_unregister "${debconf_name}" || :
}
if [ "$1" = "configure" ]; then
# disable ureadahead (LP: #499520)
dpkg-divert --package cloud-init --rename --divert \
/etc/init/ureadahead.conf.disabled --add /etc/init/ureadahead.conf
if db_get cloud-init/datasources; then
values="$RET"
if [ "${values#*MaaS}" != "${values}" ]; then
# if db had old MAAS spelling, fix it.
values=$(echo "$values" | sed 's,MaaS,MAAS,g')
db_set cloud-init/datasources "$values"
fi
cat > /etc/cloud/cloud.cfg.d/90_dpkg.cfg <<EOF
# to update this file, run dpkg-reconfigure cloud-init
datasource_list: [ $values ]
EOF
fi
# we want to affect apt_pipelining on install, not wait for
# cloud-init to run it on next boot.
pipeline_f="/etc/apt/apt.conf.d/90cloud-init-pipelining"
if [ -f /var/lib/cloud/instance/obj.pkl ]; then
cloud-init-cfg apt-pipelining once-per-instance >/dev/null 2>&1 ||
echo "Warning: failed to setup apt-pipelining" 1>&2
elif [ ! -f "$pipeline_f" ]; then
# there was no cloud available, so populate it ourselves.
cat > "$pipeline_f" <<EOF
//Written by cloud-init per 'apt_pipelining'
Acquire::http::Pipeline-Depth "0";
EOF
fi
# if there are maas settings pre-seeded apply them
handle_preseed_maas
# if there is generic cloud-config preseed, apply them
handle_preseed_local_cloud_config
fi
# Automatically added by dh_python2:
if which pycompile >/dev/null 2>&1; then
pycompile -p cloud-init
fi
# End automatically added section
|