commit:     03cde2b911bc4aee23bd284a93cfc96021ef4650
Author:     Matthew Thode <prometheanfire <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 31 23:37:05 2016 +0000
Commit:     Matt Thode <prometheanfire <AT> gentoo <DOT> org>
CommitDate: Sun Jan 31 23:38:58 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=03cde2b9

app-emulation/cloud-init: split out growpart

Package-Manager: portage-2.2.26

 app-emulation/cloud-init/Manifest                  |   1 -
 .../cloud-init/cloud-init-0.7.5-r1.ebuild          |  52 --
 .../cloud-init/cloud-init-0.7.5-r2.ebuild          |  84 ---
 .../cloud-init/cloud-init-0.7.5-r3.ebuild          |  88 ---
 .../cloud-init/cloud-init-0.7.6-r1.ebuild          |   6 +-
 app-emulation/cloud-init/cloud-init-0.7.6.ebuild   |  98 ---
 .../files/cloud-init-0.7.5-tests-exclude.patch     |  12 -
 app-emulation/cloud-init/files/growpart            | 778 ---------------------
 8 files changed, 2 insertions(+), 1117 deletions(-)

diff --git a/app-emulation/cloud-init/Manifest 
b/app-emulation/cloud-init/Manifest
index 93c02cd..4f0a651 100644
--- a/app-emulation/cloud-init/Manifest
+++ b/app-emulation/cloud-init/Manifest
@@ -1,2 +1 @@
-DIST cloud-init-0.7.5.tar.gz 503717 SHA256 
a92bb83809c139a7db378916414c18b0819e306852d6c60dd89388868857ed33 SHA512 
79e1e4a9e1130a3a9deb0482278215baf5ed41e02beebed0a2c6fac4e215340a9537158bd259758a2e074f334c0c0b9e7b936c23eeb9c848c67f7e7835cf0f5d
 WHIRLPOOL 
7d92a0e1b6a3faf550bc442b02c117280c47d160e7e318d9fb859d6d8b59a0ef947d057dfb615bd925420a25ca28852742ee87ffd6066664faf640ca53a13073
 DIST cloud-init-0.7.6.tar.gz 515670 SHA256 
9e8fd22eb7f6e40ae6a5f66173ddc3cc18f65ee406c460a728092b37db2f3ed7 SHA512 
aa2397328afda8e77ed6d642e7642f41a4b4b5bcd3d0e87056aa8c88b56624ec65c57cfc66b0d13ccc235f1840baf1d577316974902a0439cf2f2eb0f8eef36d
 WHIRLPOOL 
639a556e51b4b4b180951f9e481f9a0dcd45067d1d5760ce7e871ceea8bbb4e195258d96273d3ef88c7e2f2520318e9172c3ad0cb23d6ad0ae1835e17087e3a5

diff --git a/app-emulation/cloud-init/cloud-init-0.7.5-r1.ebuild 
b/app-emulation/cloud-init/cloud-init-0.7.5-r1.ebuild
deleted file mode 100644
index a01d1dc..0000000
--- a/app-emulation/cloud-init/cloud-init-0.7.5-r1.ebuild
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 1999-2014 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-EAPI=5
-PYTHON_COMPAT=( python2_7 )
-
-inherit distutils-r1 eutils multilib
-
-DESCRIPTION="Package provides configuration and customization of cloud 
instance"
-HOMEPAGE="https://launchpad.net/cloud-init";
-SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz";
-
-LICENSE="GPL-3"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE="test"
-
-RDEPEND="dev-python/cheetah[${PYTHON_USEDEP}]
-               >=dev-python/prettytable-0.7.1[${PYTHON_USEDEP}]
-               dev-python/oauth[${PYTHON_USEDEP}]
-               dev-python/pyserial[${PYTHON_USEDEP}]
-               dev-python/configobj[${PYTHON_USEDEP}]
-               dev-python/pyyaml[${PYTHON_USEDEP}]
-               dev-python/requests[${PYTHON_USEDEP}]
-               dev-python/jsonpatch[${PYTHON_USEDEP}]"
-DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]
-       test? ( ${RDEPEND}
-               sys-apps/iproute2 )"
-
-PATCHES=( "${FILESDIR}"/${P}-tests-exclude.patch )
-
-#python_prepare_all() {
-#      distutils-r_python_prepare_all
-#}
-
-python_test() {
-       # These tests are not broken but expect to locate an installed exe file
-       # other than where a gentoo system installs it;  (/bin/ip sought in 
/sbin)
-       # See cloudinit/sources/DataSourceOpenNebula.py for possible patching
-       sed -e 's:test_hostname:_&:' \
-               -e 's:test_network_interfaces:_&:' \
-               -i tests/unittests/test_datasource/test_opennebula.py
-       emake test
-}
-
-python_install() {
-       distutils-r1_python_install
-       for svc in config final init init-local; do
-               newinitd "${WORKDIR}/${P}/sysvinit/gentoo/cloud-${svc}" 
"cloud-${svc}"
-       done
-}

diff --git a/app-emulation/cloud-init/cloud-init-0.7.5-r2.ebuild 
b/app-emulation/cloud-init/cloud-init-0.7.5-r2.ebuild
deleted file mode 100644
index d53ccc6..0000000
--- a/app-emulation/cloud-init/cloud-init-0.7.5-r2.ebuild
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright 1999-2014 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-EAPI=5
-PYTHON_COMPAT=( python2_7 )
-DISTUTILS_SINGLE_IMPL=TRUE
-
-inherit distutils-r1 eutils multilib systemd
-
-DESCRIPTION="Cloud instance initialization"
-HOMEPAGE="https://launchpad.net/cloud-init";
-SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz";
-
-LICENSE="GPL-3"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE="test"
-
-CDEPEND="
-       dev-python/cheetah[${PYTHON_USEDEP}]
-       dev-python/configobj[${PYTHON_USEDEP}]
-       dev-python/jsonpatch[${PYTHON_USEDEP}]
-       dev-python/oauth[${PYTHON_USEDEP}]
-       >=dev-python/prettytable-0.7.1[${PYTHON_USEDEP}]
-       dev-python/pyserial[${PYTHON_USEDEP}]
-       dev-python/pyyaml[${PYTHON_USEDEP}]
-       dev-python/requests[${PYTHON_USEDEP}]
-"
-DEPEND="
-       test? (
-               ${CDEPEND}
-               >=dev-python/httpretty-0.7.1[${PYTHON_USEDEP}]
-               dev-python/mocker[${PYTHON_USEDEP}]
-               dev-python/nose[${PYTHON_USEDEP}]
-               dev-python/pep8[${PYTHON_USEDEP}]
-               dev-python/pyflakes[${PYTHON_USEDEP}]
-               dev-python/pylint[${PYTHON_USEDEP}]
-               sys-apps/iproute2
-       )
-"
-RDEPEND="
-       ${CDEPEND}
-       virtual/logger
-"
-
-python_prepare_all() {
-       local PATCHES=(
-               "${FILESDIR}"/${P}-tests-exclude.patch
-       )
-
-       distutils-r1_python_prepare_all
-
-       # Skip SmartOS tests since they don't generally apply and don't skip 
based
-       # on environment.  Documented in bug #511384.
-       rm tests/unittests/test_datasource/test_smartos.py
-}
-
-python_test() {
-       # These tests are not broken but expect to locate an installed exe file
-       # other than where a gentoo system installs it;  (/bin/ip sought in 
/sbin)
-       # See cloudinit/sources/DataSourceOpenNebula.py for possible patching
-       sed \
-               -e 's:test_hostname:_&:' \
-               -e 's:test_network_interfaces:_&:' \
-               -i tests/unittests/test_datasource/test_opennebula.py
-
-       emake test
-}
-
-python_install_all() {
-       distutils-r1_python_install_all
-
-       doinitd "${S}"/sysvinit/gentoo/cloud-config
-       doinitd "${S}"/sysvinit/gentoo/cloud-final
-       doinitd "${S}"/sysvinit/gentoo/cloud-init
-       doinitd "${S}"/sysvinit/gentoo/cloud-init-local
-
-       systemd_dounit "${S}"/systemd/cloud-config.service
-       systemd_dounit "${S}"/systemd/cloud-config.target
-       systemd_dounit "${S}"/systemd/cloud-final.service
-       systemd_dounit "${S}"/systemd/cloud-init-local.service
-       systemd_dounit "${S}"/systemd/cloud-init.service
-}

diff --git a/app-emulation/cloud-init/cloud-init-0.7.5-r3.ebuild 
b/app-emulation/cloud-init/cloud-init-0.7.5-r3.ebuild
deleted file mode 100644
index c0861d4..0000000
--- a/app-emulation/cloud-init/cloud-init-0.7.5-r3.ebuild
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-EAPI=5
-PYTHON_COMPAT=( python2_7 )
-DISTUTILS_SINGLE_IMPL=TRUE
-
-inherit distutils-r1 eutils multilib systemd
-
-DESCRIPTION="Cloud instance initialization"
-HOMEPAGE="https://launchpad.net/cloud-init";
-SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz";
-
-LICENSE="GPL-3"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE="test"
-
-CDEPEND="
-       dev-python/cheetah[${PYTHON_USEDEP}]
-       dev-python/configobj[${PYTHON_USEDEP}]
-       dev-python/jsonpatch[${PYTHON_USEDEP}]
-       dev-python/oauth[${PYTHON_USEDEP}]
-       >=dev-python/prettytable-0.7.1[${PYTHON_USEDEP}]
-       dev-python/pyserial[${PYTHON_USEDEP}]
-       dev-python/pyyaml[${PYTHON_USEDEP}]
-       dev-python/requests[${PYTHON_USEDEP}]
-"
-DEPEND="
-       test? (
-               ${CDEPEND}
-               >=dev-python/httpretty-0.7.1[${PYTHON_USEDEP}]
-               dev-python/mocker[${PYTHON_USEDEP}]
-               dev-python/nose[${PYTHON_USEDEP}]
-               dev-python/pep8[${PYTHON_USEDEP}]
-               dev-python/pyflakes[${PYTHON_USEDEP}]
-               dev-python/pylint[${PYTHON_USEDEP}]
-               sys-apps/iproute2
-       )
-"
-RDEPEND="
-       ${CDEPEND}
-       virtual/logger
-"
-
-python_prepare_all() {
-       local PATCHES=(
-               "${FILESDIR}"/${P}-tests-exclude.patch
-       )
-
-       distutils-r1_python_prepare_all
-
-       # Skip SmartOS tests since they don't generally apply and don't skip 
based
-       # on environment.  Documented in bug #511384.
-       rm tests/unittests/test_datasource/test_smartos.py
-}
-
-python_test() {
-       # These tests are not broken but expect to locate an installed exe file
-       # other than where a gentoo system installs it;  (/bin/ip sought in 
/sbin)
-       # See cloudinit/sources/DataSourceOpenNebula.py for possible patching
-       sed \
-               -e 's:test_hostname:_&:' \
-               -e 's:test_network_interfaces:_&:' \
-               -i tests/unittests/test_datasource/test_opennebula.py
-
-       emake test
-}
-
-python_install_all() {
-       distutils-r1_python_install_all
-
-       doinitd "${S}"/sysvinit/gentoo/cloud-config
-       doinitd "${S}"/sysvinit/gentoo/cloud-final
-       doinitd "${S}"/sysvinit/gentoo/cloud-init
-       doinitd "${S}"/sysvinit/gentoo/cloud-init-local
-
-       systemd_dounit "${S}"/systemd/cloud-config.service
-       systemd_dounit "${S}"/systemd/cloud-config.target
-       systemd_dounit "${S}"/systemd/cloud-final.service
-       systemd_dounit "${S}"/systemd/cloud-init-local.service
-       systemd_dounit "${S}"/systemd/cloud-init.service
-
-       rm /etc/cloud/cloud.cfg
-       insinto /etc/cloud
-       doins "${FILESDIR}/cloud.cfg"
-}

diff --git a/app-emulation/cloud-init/cloud-init-0.7.6-r1.ebuild 
b/app-emulation/cloud-init/cloud-init-0.7.6-r1.ebuild
index 4ba95f2..9c1c7ea 100644
--- a/app-emulation/cloud-init/cloud-init-0.7.6-r1.ebuild
+++ b/app-emulation/cloud-init/cloud-init-0.7.6-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2016 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
@@ -41,7 +41,7 @@ DEPEND="
 "
 RDEPEND="
        ${CDEPEND}
-       sys-apps/gptfdisk
+       sys-fs/growpart
        virtual/logger
 "
 
@@ -92,8 +92,6 @@ python_install_all() {
        doinitd "${S}"/sysvinit/gentoo/cloud-init-local
        insinto /etc/cloud/templates
        doins "${FILESDIR}/hosts.gentoo.tmpl"
-       exeinto /usr/bin
-       doexe "${FILESDIR}/growpart"
        insinto /etc/cloud
        doins "${FILESDIR}/cloud.cfg"
 

diff --git a/app-emulation/cloud-init/cloud-init-0.7.6.ebuild 
b/app-emulation/cloud-init/cloud-init-0.7.6.ebuild
deleted file mode 100644
index b35adae..0000000
--- a/app-emulation/cloud-init/cloud-init-0.7.6.ebuild
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-EAPI=5
-PYTHON_COMPAT=( python2_7 )
-
-inherit distutils-r1 eutils multilib systemd
-
-DESCRIPTION="EC2 initialisation magic"
-HOMEPAGE="https://launchpad.net/cloud-init";
-SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz";
-
-LICENSE="GPL-3"
-SLOT="0"
-KEYWORDS="amd64 x86"
-IUSE="test"
-
-CDEPEND="
-       dev-python/cheetah[${PYTHON_USEDEP}]
-       dev-python/configobj[${PYTHON_USEDEP}]
-       dev-python/jinja[${PYTHON_USEDEP}]
-       dev-python/jsonpatch[${PYTHON_USEDEP}]
-       dev-python/oauth[${PYTHON_USEDEP}]
-       dev-python/prettytable[${PYTHON_USEDEP}]
-       dev-python/pyserial[${PYTHON_USEDEP}]
-       dev-python/pyyaml[${PYTHON_USEDEP}]
-       dev-python/requests[${PYTHON_USEDEP}]
-"
-DEPEND="
-       dev-python/setuptools[${PYTHON_USEDEP}]
-       test? (
-               ${CDEPEND}
-               >=dev-python/httpretty-0.7.1[${PYTHON_USEDEP}]
-               dev-python/mocker[${PYTHON_USEDEP}]
-               dev-python/nose[${PYTHON_USEDEP}]
-               ~dev-python/pep8-1.5.7[${PYTHON_USEDEP}]
-               dev-python/pyflakes[${PYTHON_USEDEP}]
-               sys-apps/iproute2
-       )
-"
-RDEPEND="
-       ${CDEPEND}
-       virtual/logger
-"
-
-python_prepare_all() {
-       # Note: Gentoo places ip in /sbin/ not /bin/
-       ebegin 'patching cloudinit/sources/DataSourceOpenNebula.py'
-       sed \
-               -e '438s/sbin/bin/' \
-               -i cloudinit/sources/DataSourceOpenNebula.py
-       STATUS=$?
-       eend ${STATUS}
-       [[ ${STATUS} -gt 0 ]] && die
-
-       # https://bugs.launchpad.net/cloud-init/+bug/1380424
-       ebegin 'patching tests/unittests/test_distros/test_netconfig.py'
-       sed \
-               -e '177s/test_simple_write_freebsd/_&/' \
-               -i tests/unittests/test_distros/test_netconfig.py
-       STATUS=$?
-       eend ${STATUS}
-       [[ ${STATUS} -gt 0 ]] && die
-
-       # Note Gentoo installs its own RC files
-       ebegin 'patching setup.py'
-       sed \
-               -e "144 s/'tests'/'tests.*', &/" \
-               -e '163,167 d' \
-               -i setup.py
-       STATUS=$?
-       eend ${STATUS}
-       [[ ${STATUS} -gt 0 ]] && die
-
-       distutils-r1_python_prepare_all
-}
-
-python_test() {
-       emake test
-}
-
-python_install_all() {
-       keepdir /etc/cloud
-
-       distutils-r1_python_install_all
-
-       doinitd "${S}"/sysvinit/gentoo/cloud-config
-       doinitd "${S}"/sysvinit/gentoo/cloud-final
-       doinitd "${S}"/sysvinit/gentoo/cloud-init
-       doinitd "${S}"/sysvinit/gentoo/cloud-init-local
-
-       systemd_dounit "${S}"/systemd/cloud-config.service
-       systemd_dounit "${S}"/systemd/cloud-config.target
-       systemd_dounit "${S}"/systemd/cloud-final.service
-       systemd_dounit "${S}"/systemd/cloud-init-local.service
-       systemd_dounit "${S}"/systemd/cloud-init.service
-}

diff --git 
a/app-emulation/cloud-init/files/cloud-init-0.7.5-tests-exclude.patch 
b/app-emulation/cloud-init/files/cloud-init-0.7.5-tests-exclude.patch
deleted file mode 100644
index 225f1a1..0000000
--- a/app-emulation/cloud-init/files/cloud-init-0.7.5-tests-exclude.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ur cloud-init-0.7.5.orig/setup.py cloud-init-0.7.5/setup.py
---- setup.py   2014-04-02 02:26:07.000000000 +0800
-+++ setup.py   2014-05-01 23:38:15.848225975 +0800
-@@ -114,7 +114,7 @@
-       author='Scott Moser',
-       author_email='[email protected]',
-       url='http://launchpad.net/cloud-init/',
--      packages=setuptools.find_packages(exclude=['tests']),
-+      packages=setuptools.find_packages(exclude=['tests','tests.*']),
-       scripts=['bin/cloud-init',
-                'tools/cloud-init-per',
-                ],

diff --git a/app-emulation/cloud-init/files/growpart 
b/app-emulation/cloud-init/files/growpart
deleted file mode 100644
index 4b67d8b..0000000
--- a/app-emulation/cloud-init/files/growpart
+++ /dev/null
@@ -1,778 +0,0 @@
-#!/bin/sh
-#    Copyright (C) 2011 Canonical Ltd.
-#    Copyright (C) 2013 Hewlett-Packard Development Company, L.P.
-#
-#    Authors: Scott Moser <[email protected]>
-#             Juerg Haefliger <[email protected]>
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, version 3 of the License.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# the fudge factor. if within this many bytes dont bother
-FUDGE=${GROWPART_FUDGE:-$((1024*1024))}
-TEMP_D=""
-RESTORE_FUNC=""
-RESTORE_HUMAN=""
-VERBOSITY=0
-DISK=""
-PART=""
-PT_UPDATE=false
-DRY_RUN=0
-
-SFDISK_VERSION=""
-SFDISK_2_26="22600"
-MBR_BACKUP=""
-GPT_BACKUP=""
-_capture=""
-
-error() {
-       echo "$@" 1>&2
-}
-
-fail() {
-       [ $# -eq 0 ] || echo "FAILED:" "$@"
-       exit 2
-}
-
-nochange() {
-       echo "NOCHANGE:" "$@"
-       exit 1
-}
-
-changed() {
-       echo "CHANGED:" "$@"
-       exit 0
-}
-
-change() {
-       echo "CHANGE:" "$@"
-       exit 0
-}
-
-cleanup() {
-       if [ -n "${RESTORE_FUNC}" ]; then
-               error "***** WARNING: Resize failed, attempting to revert 
******"
-               if ${RESTORE_FUNC} ; then
-                       error "***** Appears to have gone OK ****"
-               else
-                       error "***** FAILED! ******"
-                       if [ -n "${RESTORE_HUMAN}" -a -f "${RESTORE_HUMAN}" ]; 
then
-                               error "**** original table looked like: ****"
-                               cat "${RESTORE_HUMAN}" 1>&2
-                       else
-                               error "We seem to have not saved the partition 
table!"
-                       fi
-               fi
-       fi
-       [ -z "${TEMP_D}" -o ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
-}
-
-debug() {
-       local level=${1}
-       shift
-       [ "${level}" -gt "${VERBOSITY}" ] && return
-       if [ "${DEBUG_LOG}" ]; then
-               echo "$@" >>"${DEBUG_LOG}"
-       else
-               error "$@"
-       fi
-}
-
-debugcat() {
-       local level="$1"
-       shift;
-       [ "${level}" -gt "$VERBOSITY" ] && return
-       if [ "${DEBUG_LOG}" ]; then
-               cat "$@" >>"${DEBUG_LOG}"
-       else
-               cat "$@" 1>&2
-       fi
-}
-
-mktemp_d() {
-       # just a mktemp -d that doens't need mktemp if its not there.
-       _RET=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX" 2>/dev/null) &&
-               return
-       _RET=$(umask 077 && t="${TMPDIR:-/tmp}/${0##*/}.$$" &&
-               mkdir "${t}" && echo "${t}")
-       return
-}
-
-Usage() {
-       cat <<EOF
-${0##*/} disk partition
-   rewrite partition table so that partition takes up all the space it can
-   options:
-    -h | --help       print Usage and exit
-         --fudge F    if part could be resized, but change would be
-                      less than 'F' bytes, do not resize (default: ${FUDGE})
-    -N | --dry-run    only report what would be done, show new 'sfdisk -d'
-    -v | --verbose    increase verbosity / debug
-    -u | --update  R  update the the kernel partition table info after growing
-                      this requires kernel support and 'partx --update'
-                      R is one of:
-                       - 'auto'  : [default] update partition if possible
-                       - 'force' : try despite sanity checks (fail on failure)
-                       - 'off'   : do not attempt
-                       - 'on'    : fail if sanity checks indicate no support
-
-   Example:
-    - ${0##*/} /dev/sda 1
-      Resize partition 1 on /dev/sda
-EOF
-}
-
-bad_Usage() {
-       Usage 1>&2
-       error "$@"
-       exit 2
-}
-
-sfdisk_restore_legacy() {
-       sfdisk --no-reread "${DISK}" -I "${MBR_BACKUP}"
-}
-
-sfdisk_restore() {
-       # files are named: sfdisk-<device>-<offset>.bak
-       local f="" offset="" fails=0
-       for f in "${MBR_BACKUP}"*.bak; do
-               [ -f "$f" ] || continue
-               offset=${f##*-}
-               offset=${offset%.bak}
-               [ "$offset" = "$f" ] && {
-                       error "WARN: confused by file $f";
-                       continue;
-               }
-               dd "if=$f" "of=${DISK}" seek=$(($offset)) bs=1 conv=notrunc ||
-                       { error "WARN: failed restore from $f"; 
fails=$(($fails+1)); }
-       done
-       return $fails
-}
-
-sfdisk_worked_but_blkrrpart_failed() {
-       local ret="$1" output="$2"
-       # exit code found was just 1, but dont insist on that
-       #[ $ret -eq 1 ] || return 1
-       # Successfully wrote the new partition table
-       grep -qi "Success.* wrote.* new.* partition" "$output" &&
-               grep -qi "BLKRRPART: Device or resource busy" "$output"
-       return
-}
-
-get_sfdisk_version() {
-       # set SFDISK_VERSION to MAJOR*10000+MINOR*100+MICRO
-       local out oifs="$IFS" ver=""
-       [ -n "$SFDISK_VERSION" ] && return 0
-       # expected output: sfdisk from util-linux 2.25.2
-       out=$(sfdisk --version) ||
-               { error "failed to get sfdisk version"; return 1; }
-       set -- $out
-       ver=$4
-       case "$ver" in
-               [0-9]*.[0-9]*.[0-9]|[0-9].[0-9]*)
-                       IFS="."; set -- $ver; IFS="$oifs"
-                       SFDISK_VERSION=$(($1*10000+$2*100+${3:-0}))
-                       return 0;;
-               *) error "unexpected output in sfdisk --version [$out]"
-                       return 1;;
-       esac
-}
-
-resize_sfdisk() {
-       local humanpt="${TEMP_D}/recovery"
-       local mbr_backup="${TEMP_D}/orig.save"
-       local restore_func=""
-       local format="$1"
-
-       local change_out=${TEMP_D}/change.out
-       local dump_out=${TEMP_D}/dump.out
-       local new_out=${TEMP_D}/new.out
-       local dump_mod=${TEMP_D}/dump.mod
-       local tmp="${TEMP_D}/tmp.out"
-       local err="${TEMP_D}/err.out"
-       local mbr_max_512="4294967296"
-
-       local pt_start pt_size pt_end max_end new_size change_info dpart
-       local sector_num sector_size disk_size tot out
-
-       rqe sfd_list sfdisk --list --unit=S "$DISK" >"$tmp" ||
-               fail "failed: sfdisk --list $DISK"
-       if [ "${SFDISK_VERSION}" -lt ${SFDISK_2_26} ]; then
-               # exected output contains: Units: sectors of 512 bytes, ...
-               out=$(awk '$1 == "Units:" && $5 ~ /bytes/ { print $4 }' "$tmp") 
||
-                       fail "failed to read sfdisk output"
-               if [ -z "$out" ]; then
-                       error "WARN: sector size not found in sfdisk output, 
assuming 512"
-                       sector_size=512
-               else
-                       sector_size="$out"
-               fi
-               local _w _cyl _w1 _heads _w2 sectors _w3 t s
-               # show-size is in units of 1024 bytes (same as /proc/partitions)
-               t=$(sfdisk --show-size "${DISK}") ||
-                       fail "failed: sfdisk --show-size $DISK"
-               disk_size=$((t*1024))
-               sector_num=$(($disk_size/$sector_size))
-               msg="disk size '$disk_size' not evenly div by sector size 
'$sector_size'"
-               [ "$((${disk_size}%${sector_size}))" -eq 0 ] ||
-                       error "WARN: $msg"
-               restore_func=sfdisk_restore_legacy
-       else
-               # --list first line output:
-               # Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors
-               local _x
-               read _x _x _x _x disk_size _x sector_num _x  < "$tmp"
-               sector_size=$((disk_size/$sector_num))
-               restore_func=sfdisk_restore
-       fi
-
-       debug 1 "$sector_num sectors of $sector_size. total size=${disk_size} 
bytes"
-       [ $(($disk_size/512)) -gt $mbr_max_512 ] &&
-               debug 1 "WARN: disk is larger than 2TB. additional space will 
go unused."
-
-       rqe sfd_dump sfdisk --unit=S --dump "${DISK}" >"${dump_out}" ||
-               fail "failed to dump sfdisk info for ${DISK}"
-       RESTORE_HUMAN="$dump_out"
-
-       {
-               echo "## sfdisk --unit=S --dump ${DISK}"
-               cat "${dump_out}"
-       }  >"$humanpt"
-
-       [ $? -eq 0 ] || fail "failed to save sfdisk -d output"
-       RESTORE_HUMAN="$humanpt"
-
-       debugcat 1 "$humanpt"
-
-       sed -e 's/,//g; s/start=/start /; s/size=/size /' "${dump_out}" \
-               >"${dump_mod}" ||
-               fail "sed failed on dump output"
-
-       dpart="${DISK}${PART}" # disk and partition number
-       if [ -b "${DISK}p${PART}" -a "${DISK%[0-9]}" != "${DISK}" ]; then
-               # for block devices that end in a number (/dev/nbd0)
-               # the partition is "<name>p<partition_number>" (/dev/nbd0p1)
-               dpart="${DISK}p${PART}"
-       elif [ "${DISK#/dev/loop[0-9]}" != "${DISK}" ]; then
-               # for /dev/loop devices, sfdisk output will be <name>p<number>
-               # format also, even though there is not a device there.
-               dpart="${DISK}p${PART}"
-       fi
-
-       pt_start=$(awk '$1 == pt { print $4 }' "pt=${dpart}" <"${dump_mod}") &&
-               pt_size=$(awk '$1 == pt { print $6 }' "pt=${dpart}" 
<"${dump_mod}") &&
-               [ -n "${pt_start}" -a -n "${pt_size}" ] &&
-               pt_end=$((${pt_size}+${pt_start})) ||
-               fail "failed to get start and end for ${dpart} in ${DISK}"
-
-       # find the minimal starting location that is >= pt_end 
-       max_end=$(awk '$3 == "start" { if($4 >= pt_end && $4 < min)
-               { min = $4 } } END { printf("%s\n",min); }' \
-               min=${sector_num} pt_end=${pt_end} "${dump_mod}") &&
-               [ -n "${max_end}" ] ||
-               fail "failed to get max_end for partition ${PART}"
-
-       mbr_max_sectors=$((mbr_max_512*$((sector_size/512))))
-       if [ "$max_end" -gt "$mbr_max_sectors" ]; then
-               max_end=$mbr_max_sectors
-       fi
-
-       if [ "$format" = "gpt" ]; then
-               # sfdisk respects 'last-lba' in input, and complains about
-               # partitions that go past that.  without it, it does the right 
thing.
-               sed -i '/^last-lba:/d' "$dump_out" ||
-                       fail "failed to remove last-lba from output"
-       fi
-
-       local gpt_second_size="33"
-       if [ "${max_end}" -gt "$((${sector_num}-${gpt_second_size}))" ]; then
-               # if mbr allow subsequent conversion to gpt without shrinking 
the
-               # partition.  safety net at cost of 33 sectors, seems 
reasonable.
-               # if gpt, we can't write there anyway.
-               debug 1 "padding ${gpt_second_size} sectors for gpt secondary 
header"
-               max_end=$((${sector_num}-${gpt_second_size}))
-       fi
-
-       debug 1 "max_end=${max_end} tot=${sector_num} pt_end=${pt_end}" \
-               "pt_start=${pt_start} pt_size=${pt_size}"
-       [ $((${pt_end})) -eq ${max_end} ] &&
-               nochange "partition ${PART} is size ${pt_size}. it cannot be 
grown"
-       [ $((${pt_end}+(${FUDGE}/$sector_size))) -gt ${max_end} ] &&
-               nochange "partition ${PART} could only be grown by" \
-               "$((${max_end}-${pt_end})) [fudge=$((${FUDGE}/$sector_size))]"
-
-       # now, change the size for this partition in ${dump_out} to be the
-       # new size
-       new_size=$((${max_end}-${pt_start}))
-       sed "\|^\s*${dpart} |s/${pt_size},/${new_size},/" "${dump_out}" \
-               >"${new_out}" ||
-               fail "failed to change size in output"
-
-       change_info="partition=${PART} start=${pt_start} old: size=${pt_size} 
end=${pt_end} new: size=${new_size},end=${max_end}"
-       if [ ${DRY_RUN} -ne 0 ]; then
-               echo "CHANGE: ${change_info}"
-               {
-                       echo "# === old sfdisk -d ==="
-                       cat "${dump_out}"
-                       echo "# === new sfdisk -d ==="
-                       cat "${new_out}"
-               } 1>&2
-               exit 0
-       fi
-
-       MBR_BACKUP="${mbr_backup}"
-       LANG=C sfdisk --no-reread "${DISK}" --force \
-               -O "${mbr_backup}" <"${new_out}" >"${change_out}" 2>&1
-       ret=$?
-       [ $ret -eq 0 ] || RESTORE_FUNC="${restore_func}"
-
-       if [ $ret -eq 0 ]; then
-               :
-       elif $PT_UPDATE &&
-               sfdisk_worked_but_blkrrpart_failed "$ret" "${change_out}"; then
-               # if the command failed, but it looks like only because
-               # the device was busy and we have pt_update, then go on
-               debug 1 "sfdisk failed, but likely only because of blkrrpart"
-       else
-               error "attempt to resize ${DISK} failed. sfdisk output below:"
-               sed 's,^,| ,' "${change_out}" 1>&2
-               fail "failed to resize"
-       fi
-
-       rq pt_update pt_update "$DISK" "$PART" ||
-               fail "pt_resize failed"
-
-       RESTORE_FUNC=""
-
-       changed "${change_info}"
-
-       # dump_out looks something like:
-       ## partition table of /tmp/out.img
-       #unit: sectors
-       #
-       #/tmp/out.img1 : start=        1, size=    48194, Id=83
-       #/tmp/out.img2 : start=    48195, size=   963900, Id=83
-       #/tmp/out.img3 : start=  1012095, size=   305235, Id=82
-       #/tmp/out.img4 : start=  1317330, size=   771120, Id= 5
-       #/tmp/out.img5 : start=  1317331, size=   642599, Id=83
-       #/tmp/out.img6 : start=  1959931, size=    48194, Id=83
-       #/tmp/out.img7 : start=  2008126, size=    80324, Id=83
-}
-
-gpt_restore() {
-       sgdisk -l "${GPT_BACKUP}" "${DISK}"
-}
-
-resize_sgdisk() {
-       GPT_BACKUP="${TEMP_D}/pt.backup"
-
-       local pt_info="${TEMP_D}/pt.info"
-       local pt_pretend="${TEMP_D}/pt.pretend"
-       local pt_data="${TEMP_D}/pt.data"
-       local out="${TEMP_D}/out"
-
-       local dev="disk=${DISK} partition=${PART}"
-
-       local pt_start pt_end pt_size last pt_max code guid name new_size
-       local old new change_info sector_size
-       
-       # Dump the original partition information and details to disk. This is
-       # used in case something goes wrong and human interaction is required
-       # to revert any changes.
-       rqe sgd_info sgdisk "--info=${PART}" --print "${DISK}" >"${pt_info}" ||
-               fail "${dev}: failed to dump original sgdisk info"
-       RESTORE_HUMAN="${pt_info}"
-
-       sector_size=$(awk '$0 ~ /^Logical sector size:.*bytes/ { print $4 }' \
-               "$pt_info") && [ -n "$sector_size" ] || {
-               sector_size=512
-               error "WARN: did not find sector size, assuming 512"
-       }
-
-       debug 1 "$dev: original sgdisk info:"
-       debugcat 1 "${pt_info}"
-
-       # Pretend to move the backup GPT header to the end of the disk and dump
-       # the resulting partition information. We use this info to determine if
-       # we have to resize the partition.
-       rqe sgd_pretend sgdisk --pretend --move-second-header \
-               --print "${DISK}" >"${pt_pretend}" ||
-               fail "${dev}: failed to dump pretend sgdisk info"
-
-       debug 1 "$dev: pretend sgdisk info"
-       debugcat 1 "${pt_pretend}"
-
-       # Extract the partition data from the pretend dump
-       awk 'found { print } ; $1 == "Number" { found = 1 }' \
-               "${pt_pretend}" >"${pt_data}" ||
-               fail "${dev}: failed to parse pretend sgdisk info"
-
-       # Get the start and end sectors of the partition to be grown
-       pt_start=$(awk '$1 == '"${PART}"' { print $2 }' "${pt_data}") &&
-               [ -n "${pt_start}" ] ||
-               fail "${dev}: failed to get start sector"
-       pt_end=$(awk '$1 == '"${PART}"' { print $3 }' "${pt_data}") &&
-               [ -n "${pt_end}" ] ||
-               fail "${dev}: failed to get end sector"
-       pt_size="$((${pt_end} - ${pt_start}))"
-
-       # Get the last usable sector
-       last=$(awk '/last usable sector is/ { print $NF }' \
-               "${pt_pretend}") && [ -n "${last}" ] ||
-               fail "${dev}: failed to get last usable sector"
-
-       # Find the minimal start sector that is >= pt_end 
-       pt_max=$(awk '{ if ($2 >= pt_end && $2 < min) { min = $2 } } END \
-               { print min }' min="${last}" pt_end="${pt_end}" \
-               "${pt_data}") && [ -n "${pt_max}" ] ||
-               fail "${dev}: failed to find max end sector"
-
-       debug 1 "${dev}: pt_start=${pt_start} pt_end=${pt_end}" \
-               "pt_size=${pt_size} pt_max=${pt_max} last=${last}"
-
-       # Check if the partition can be grown
-       [ "${pt_end}" -eq "${pt_max}" ] &&
-               nochange "${dev}: size=${pt_size}, it cannot be grown"
-       [ "$((${pt_end} + ${FUDGE}/${sector_size}))" -gt "${pt_max}" ] &&
-               nochange "${dev}: could only be grown by" \
-               "$((${pt_max} - ${pt_end})) [fudge=$((${FUDGE}/$sector_size))]"
-
-       # The partition can be grown if we made it here. Get some more info
-       # about it so we can do it properly.
-       # FIXME: Do we care about the attribute flags?
-       code=$(awk '/^Partition GUID code:/ { print $4 }' "${pt_info}")
-       guid=$(awk '/^Partition unique GUID:/ { print $4 }' "${pt_info}")
-       name=$(awk '/^Partition name:/ { gsub(/'"'"'/, "") ; \
-               if (NF >= 3) print substr($0, index($0, $3)) }' "${pt_info}")
-       [ -n "${code}" -a -n "${guid}" ] ||
-               fail "${dev}: failed to parse sgdisk details"
-
-       debug 1 "${dev}: code=${code} guid=${guid} name='${name}'"
-       local wouldrun=""
-       [ "$DRY_RUN" -ne 0 ] && wouldrun="would-run"
-
-       # Calculate the new size of the partition
-       new_size=$((${pt_max} - ${pt_start}))
-       old="old: size=${pt_size},end=${pt_end}"
-       new="new: size=${new_size},end=${pt_max}"
-       change_info="${dev}: start=${pt_start} ${old} ${new}"
-       
-       # Backup the current partition table, we're about to modify it
-       rq sgd_backup $wouldrun sgdisk "--backup=${GPT_BACKUP}" "${DISK}" ||
-               fail "${dev}: failed to backup the partition table"
-
-       # Modify the partition table. We do it all in one go (the order is
-       # important!):
-       #  - move the GPT backup header to the end of the disk
-       #  - delete the partition
-       #  - recreate the partition with the new size
-       #  - set the partition code
-       #  - set the partition GUID
-       #  - set the partition name
-       rq sgdisk_mod $wouldrun sgdisk --move-second-header "--delete=${PART}" \
-               "--new=${PART}:${pt_start}:${pt_max}" \
-               "--typecode=${PART}:${code}" \
-               "--partition-guid=${PART}:${guid}" \
-               "--change-name=${PART}:${name}" "${DISK}" &&
-               rq pt_update $wouldrun pt_update "$DISK" "$PART" || {
-               RESTORE_FUNC=gpt_restore
-               fail "${dev}: failed to repartition"
-       }
-
-       # Dry run
-       [ "${DRY_RUN}" -ne 0 ] && change "${change_info}"
-
-       changed "${change_info}"
-}
-
-kver_to_num() {
-       local kver="$1" maj="" min="" mic="0"
-       kver=${kver%%-*}
-       maj=${kver%%.*}
-       min=${kver#${maj}.}
-       min=${min%%.*}
-       mic=${kver#${maj}.${min}.}
-       [ "$kver" = "$mic" ] && mic=0
-       _RET=$(($maj*1000*1000+$min*1000+$mic))
-}
-
-kver_cmp() {
-       local op="$2" n1="" n2=""
-       kver_to_num "$1"
-       n1="$_RET"
-       kver_to_num "$3"
-       n2="$_RET"
-       [ $n1 $op $n2 ]
-}
-
-rq() {
-       # runquieterror(label, command)
-       # gobble stderr of a command unless it errors
-       local label="$1" ret="" efile=""
-       efile="$TEMP_D/$label.err"
-       shift;
-
-       local rlabel="running"
-       [ "$1" = "would-run" ] && rlabel="would-run" && shift
-
-       local cmd="" x=""
-       for x in "$@"; do
-               [ "${x#* }" != "$x" -o "${x#* \"}" != "$x" ] && x="'$x'"
-               cmd="$cmd $x"
-       done
-       cmd=${cmd# }
-
-       debug 2 "$rlabel[$label][$_capture]" "$cmd"
-       [ "$rlabel" = "would-run" ] && return 0
-
-       if [ "${_capture}" = "erronly" ]; then
-               "$@" 2>"$TEMP_D/$label.err"
-               ret=$?
-       else
-               "$@" >"$TEMP_D/$label.err" 2>&1
-               ret=$?
-       fi
-       if [ $ret -ne 0 ]; then
-               error "failed [$label:$ret]" "$@"
-               cat "$efile" 1>&2
-       fi
-       return $ret
-}
-
-rqe() {
-       local _capture="erronly"
-       rq "$@"
-}
-
-verify_ptupdate() {
-       local input="$1" found="" reason="" kver=""
-
-       # we can always satisfy 'off'
-       if [ "$input" = "off" ]; then
-               _RET="false";
-               return 0;
-       fi
-
-       if command -v partx >/dev/null 2>&1; then
-               local out="" ret=0
-               out=$(partx --help 2>&1)
-               ret=$?
-               if [ $ret -eq 0 ]; then
-                       echo "$out" | grep -q -- --update || {
-                               reason="partx has no '--update' flag in usage."
-                               found="off"
-                       }
-               else
-                       reason="'partx --help' returned $ret. assuming it is 
old."
-                       found="off"
-               fi
-       else
-               reason="no 'partx' command"
-               found="off"
-       fi
-
-       if [ -z "$found" ]; then
-               if [ "$(uname)" != "Linux" ]; then
-                       reason="Kernel is not Linux per uname."
-                       found="off"
-               fi
-       fi
-
-       if [ -z "$found" ]; then
-               kver=$(uname -r) || debug 1 "uname -r failed!"
-
-               if ! kver_cmp "${kver-0.0.0}" -ge 3.8.0; then
-                       reason="Kernel '$kver' < 3.8.0."
-                       found="off"
-               fi
-       fi
-
-       if [ -z "$found" ]; then
-               _RET="true"
-               return 0
-       fi
-
-       case "$input" in
-               on) error "$reason"; return 1;;
-               auto)
-                       _RET="false";
-                       debug 1 "partition update disabled: $reason"
-                       return 0;;
-               force)
-                       _RET="true"
-                       error "WARNING: ptupdate forced on even though: $reason"
-                       return 0;;
-       esac
-       error "unknown input '$input'";
-       return 1;
-}
-
-pt_update() {
-       local dev="$1" part="$2" update="${3:-$PT_UPDATE}"
-       if ! $update; then
-               return 0
-       fi
-       # partx only works on block devices (do not run on file)
-       [ -b "$dev" ] || return 0
-       partx --update "$part" "$dev"
-}
-
-has_cmd() {
-       command -v "${1}" >/dev/null 2>&1
-}
-
-resize_sgdisk_gpt() {
-       resize_sgdisk gpt
-}
-
-resize_sgdisk_dos() {
-       fail "unable to resize dos label with sgdisk"
-}
-
-resize_sfdisk_gpt() {
-       resize_sfdisk gpt
-}
-
-resize_sfdisk_dos() {
-       resize_sfdisk dos
-}
-
-get_table_format() {
-       local out="" disk="$1"
-       if has_cmd blkid && out=$(blkid -o value -s PTTYPE "$disk") &&
-               [ "$out" = "dos" -o "$out" = "gpt" ]; then
-               _RET="$out"
-               return
-       fi
-       _RET="dos"
-       if [ ${SFDISK_VERSION} -lt ${SFDISK_2_26} ] &&
-               out=$(sfdisk --id --force "$disk" 1 2>/dev/null); then
-               if [ "$out" = "ee" ]; then
-                       _RET="gpt"
-               else
-                       _RET="dos"
-               fi
-               return
-       elif out=$(LANG=C sfdisk --list "$disk"); then
-               out=$(echo "$out" | sed -e '/Disklabel type/!d' -e 's/.*: //')
-               case "$out" in
-                       gpt|dos) _RET="$out";;
-                       *) error "WARN: unknown label $out";;
-               esac
-       fi
-}
-
-get_resizer() {
-       local format="$1" user=${2:-"auto"}
-
-       case "$user" in
-               sgdisk) _RET="resize_sgdisk_$format"; return;;
-               sfdisk) _RET="resize_sfdisk_$format"; return;;
-               auto) :;;
-               *) error "unexpected input: '$user'";;
-       esac
-
-       if [ "$format" = "dos" ]; then
-               _RET="resize_sfdisk_dos"
-               return 0
-       fi
-
-       if [ "${SFDISK_VERSION}" -ge ${SFDISK_2_26} ]; then
-               _RET="resize_sfdisk_gpt"
-       elif has_cmd sgdisk; then
-               _RET="resize_sgdisk_$format"
-       else
-               error "no tools available to resize disk with '$format'"
-               return 1
-       fi
-       return 0
-}
-
-pt_update="auto"
-resizer=${GROWPART_RESIZER:-"auto"}
-while [ $# -ne 0 ]; do
-       cur=${1}
-       next=${2}
-       case "$cur" in
-               -h|--help)
-                       Usage
-                       exit 0
-                       ;;
-               --fudge)
-                       FUDGE=${next}
-                       shift
-                       ;;
-               -N|--dry-run)
-                       DRY_RUN=1
-                       ;;
-               -u|--update|--update=*)
-                       if [ "${cur#--update=}" != "$cur" ]; then
-                               next="${cur#--update=}"
-                       else
-                               shift
-                       fi
-                       case "$next" in
-                               off|auto|force|on) pt_update=$next;;
-                               *) fail "unknown --update option: $next";;
-                       esac
-                       ;;
-               -v|--verbose)
-                       VERBOSITY=$(($VERBOSITY+1))
-                       ;;
-               --)
-                       shift
-                       break
-                       ;;
-               -*)
-                       fail "unknown option ${cur}"
-                       ;;
-               *)
-                       if [ -z "${DISK}" ]; then
-                               DISK=${cur}
-                       else
-                               [ -z "${PART}" ] || fail "confused by arg 
${cur}"
-                               PART=${cur}
-                       fi
-                       ;;
-       esac
-       shift
-done
-
-[ -n "${DISK}" ] || bad_Usage "must supply disk and partition-number"
-[ -n "${PART}" ] || bad_Usage "must supply partition-number"
-
-has_cmd "sfdisk" || fail "sfdisk not found"
-get_sfdisk_version || fail
-
-[ -e "${DISK}" ] || fail "${DISK}: does not exist"
-
-[ "${PART#*[!0-9]}" = "${PART}" ] || fail "partition-number must be a number"
-
-verify_ptupdate "$pt_update" || fail
-PT_UPDATE=$_RET
-
-debug 1 "update-partition set to $PT_UPDATE"
-
-mktemp_d && TEMP_D="${_RET}" || fail "failed to make temp dir"
-trap cleanup 0 # EXIT - some shells may not like 'EXIT' but are ok with 0
-
-# get the ID of the first partition to determine if it's MBR or GPT
-get_table_format "$DISK" || fail
-format=$_RET
-get_resizer "$format" "$resizer" ||
-    fail "failed to get a resizer for id '$id'"
-resizer=$_RET
-
-debug 1 "resizing $PART on $DISK using $resizer"
-"$resizer"
-
-# vi: ts=4 noexpandtab

Reply via email to