This file is indexed.

postinst is in cloud-init 0.7.5-0ubuntu1.18.

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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#!/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}" || :
}

fix_1336855() {
  ### Begin fix for LP: 1336855
  # fix issue where cloud-init misidentifies the location of grub and
  # where grub misidentifies the location of the device

  # if cloud-init's grub module did not run, then it did not break anything.
  [ -f /var/lib/cloud/instance/sem/config_grub_dpkg ] || return 0

  # This bug only happened on /dev/xvda devices
  [ -b /dev/xvda ] || return 0

  # we can't fix the system without /proc/cmdline
  [ -r /proc/cmdline ] || return 0

  # Don't do anything unless we have grub
  [ -x /usr/sbin/grub-install ] || return 0

  # First, identify the kernel device for the parent.
  for parm in $(cat /proc/cmdline); do
       dev=$(echo $parm | awk -F\= '{print$NF}')
       case $parm in
           root=UUID*)  [ -d /dev/disk/by-uuid ] &&
                            root_dev=$(readlink -f /dev/disk/by-uuid/$dev);;
           root=LABEL*) [ -d /dev/disk/by-label ] &&
                            root_dev=$(readlink -f /dev/disk/by-label/$dev);;
           root=/dev*)  [ -d /dev ] &&
                            root_dev=$(readlink -f $dev);;
       esac
       [ -n "$root_dev" ] && break
  done

  # Don't continue if we don't have a root directive
  [ -z "$root_dev" ] && return 0

  # Only deal with simple, cloud-based devices
  case $root_dev in
       /dev/vda*|/dev/xvda*|/dev/sda*) ;;
       *) return 0;;
  esac

  # Make sure that we are not chrooted.
  [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ] && return 0

  # Check if we are in a container, i.e. LXC
  for t in running-in-container lxc-is-container; do
       command -v $t && $t && return 0
  done >/dev/null 2>&1

  # Find out where grub thinks the root device is. Only continue if
  # grub postinst would install/reinstall grub
  db_get grub-pc/install_devices && grub_cfg_dev=${RET} || return 0
  db_get grub-pc/install_devices_empty && grub_dev_empty=${RET} || return 0

  # Find out the parent device for the root device.
  #     example output: sda/sda1
  block_path=$(udevadm info -q path -n $root_dev | awk '-Fblock/' '{print$NF}')

  # Extract the parent device name. This works where the device is a block device
  #     example output: /dev/sda
  parent_dev=$(echo $block_path | awk '-F/' '$1 { if ( $1 ) {print"/dev/"$1}}')
  [ -b "${parent_dev}" ] || return 0

  # Do nothing if the device that the grub postinst would install is already used
  [ "$grub_cfg_dev" = "$parent_dev" -o "$grub_cfg_dev" = "$root_dev" ] && return 0

  # If we get here, do the installation
  echo "Reconfiguring grub install device due to mismatch (LP: #1336855)"
  echo "   Grub should use $parent_dev but is configured for $grub_cfg_dev"
  db_set grub-pc/install_devices "$parent_dev"
  grub-install $parent_dev &&
     echo "Reinstalled grub" ||
     echo "WARNING! Unable to fix grub device mismatch. You may be broken."

}

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 single --name apt-pipelining --frequency once >/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

   # fix issue where cloud-init misidentifies the location of grub
   fix_1336855

fi


# Automatically added by dh_python2:
if which pycompile >/dev/null 2>&1; then
	pycompile -p cloud-init 
fi

# End automatically added section